gpt4 book ai didi

CAST 性能中的 SQL VARCHAR 与 NVARCHAR

转载 作者:行者123 更新时间:2023-12-04 14:44:21 24 4
gpt4 key购买 nike

我有一个比较两个表中数据的查询:

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,非空,
  • Column3 varchar(50),非空
  • 第 4 列 varchar(9),非空

  • 但实际上都只包含数字,长度为 9-15 位
    我想知道这种性能损失的原因是什么?

    更新:
    执行计划显示如下:
    enter image description here

    最佳答案

    nvarchar 数据类型具有更高的数据类型优先级。因此,对于 nvarchar CAST,索引列必须首先转换为 nvarchar,因此索引不能用于更有效的查找。

    索引列已经是 varchar,因此在这种情况下不需要列转换。索引可用于执行计划中更高效的查找数据访问路径。

    这种行为被称为 sargable。见 http://en.wikipedia.org/wiki/Sargable .

    关于CAST 性能中的 SQL VARCHAR 与 NVARCHAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26177537/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com