【发布时间】:2021-11-24 21:54:58
【问题描述】:
declare @p0 nvarchar(4000)
select id_t_s from table1 where id_t = @p0
这将是索引扫描,因为 id_t 列是 varchar(100)。这将需要 145 毫秒。执行计划有警告。
表达式中的类型转换 (CONVERT_IMPLICIT(nvarchar(100),tables1.[id_t],0)=[@P0]) 可能会影响查询计划选择中的“SeekPlan”。
如果我将其更改为以下:
declare @p0 nvarchar(4000)
select id_t_s from table1 where id_t = @p0
这将是索引扫描,因为 id_t 列是 varchar(100)。耗时 0 毫秒。
declare @p0 varchar(4000)
select id_t_s from table1 where id_t = @p0
这将是索引查找。这将需要 0 毫秒。
有什么方法可以在不更改代码或表格的情况下修复它?
谢谢, 天空
【问题讨论】:
-
如果您的列数据类型是
varchar,那么您的变量的数据类型必须匹配,否则正如您已经注意到的,您将有一个不可分割的隐式转换。究竟需要修复什么?
标签: sql-server query-optimization