[英]SQL VARCHAR vs NVARCHAR in CAST performance
我有一個查詢比較兩個表中的數據:
SELECT DISTINCT
MT.Column1,
MT.Column2,
MT.Column5,
MT.Column7,
MT.Column9
FROM tblMyTable MT
WHERE
EntryDate >= @StartDate AND EntryDate <= @EndDate AND
NOT EXISTS (
SELECT ID FROM tblOtherTable
WHERE SomeString LIKE
'X' + CAST(MT.Column1 AS VARCHAR(16)) +
'Y' + CAST(MT.Column3 AS VARCHAR(16)) +
'Z' + CAST(MT.Column4 AS VARCHAR(16)) + '%'
)
它運作正常。 但是當我嘗試使用CAST(var AS NVARCHAR)時,查詢執行時間超過10分鍾,並且在最近的將來似乎沒有完成。 但是當我如上所述更改為CAST(var AS VARCHAR)時,查詢將在2-3秒內完成。
CASTed列定義為:
但實際上所有都只包含數字,長度為9-15位
我想知道這種性能損失的原因是什么?
更新:
執行計划顯示如下:
nvarchar數據類型具有更高的數據類型優先級。 因此,對於nvarchar CAST,索引列必須首先轉換為nvarchar,並且索引不能用於更有效的搜索結果。
索引列已經是varchar,因此在這種情況下不需要列轉換。 索引可用於執行計划中更有效的搜索數據訪問路徑。
這種行為被稱為sargable。 見http://en.wikipedia.org/wiki/Sargable 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.