簡體   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