繁体   English   中英

将varchar更改为nvarchar后,站点性能下降

[英]Site performance decreased after changing varchar to nvarchar

我最近不得不将表的列定义之一转换为varchar nvarchar 从那以后,我可以感觉到通过表格的搜索数据变慢了。

我在表中有4200000多行并且正在增长。

我的Web应用程序当前不使用存储过程从数据库中检索数据。 如果我使用存储过程,它会略微提高搜索性能吗?

或者您有任何其他建议可以改进吗?

这是目前使用的查询:

SELECT TOP 100 id, callerID, dateTime, activity, senderNum, msgSent, smsgRespond, msgIn 
FROM tbl_activitylog 
WHERE callerID = @callerID 
ORDER BY id DESC

msgSent列是转换为nvarchar的列。

下面是表格结构:

id (int, Primary Key, Auto Increment)  
callerID (bigint)  
dateTime (datetime)  
activity (varchar(50)  
senderNum (int)  
msgSent (nvarchar(160))  
smsgRespond (varchar(50))  
msgIn (varchar(160))  

我不明白索引部分。

我不知道索引部分,所以我想我没有在数据库中做任何索引。

处理数据库性能时最重要的是INDEXES

(callerID, id DESC)上添加索引

您的查询将大大快了很多

您还可以在SSMS中运行查询,然后按“估计的查询计划”,它很可能会出现缺少索引警告。 您几乎可以复制并粘贴此警告并运行它。 您需要更改的唯一内容是索引的名称。

编辑:将您的查询放入存储过程不会自动带来更好的性能。 因此,如果您可以使用“简单的SELECT语句”检索所需的所有数据,请执行此操作。

但是你应该检查并最终修复你的数据库。

DBCC CHECKDB('<db_name>') -- check the db for error
DBCC UPDATEUSAGE('<db_name>') -- fix errors

同样重要的是创建相关指

编辑:在您发布查询后:在CalledId上添加索引。

检查SQL SELECTS,检查WHERE语句中的columsn,并为它们添加索引。 这应该会改善很多!

如果你有一个针对varchar的索引,而查询包含Nvarhchar那么这个索引将被忽略。 您需要同步所有使用的类型(在任何地方都相同)并重建索引 ,例如:

ALTER INDEX IX_msgSent ON tbl_activitylog REBUILD

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM