簡體   English   中英

CAST性能中的SQL VARCHAR與NVARCHAR

[英]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列定義為:

  • Column1 int,not null,
  • Column3 varchar(50),不為null
  • Column4 varchar(9),不為null

但實際上所有都只包含數字,長度為9-15位

我想知道這種性能損失的原因是什么?

更新:

執行計划顯示如下: 在此輸入圖像描述

nvarchar數據類型具有更高的數據類型優先級。 因此,對於nvarchar CAST,索引列必須首先轉換為nvarchar,並且索引不能用於更有效的搜索結果。

索引列已經是varchar,因此在這種情況下不需要列轉換。 索引可用於執行計划中更有效的搜索數據訪問路徑。

這種行為被稱為sargable。 http://en.wikipedia.org/wiki/Sargable

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM