【发布时间】:2019-07-21 12:49:39
【问题描述】:
我将加入表 A 与表 B 和 C。所有三个表都有相似的列和索引,B 和C 的行数大致相同。但是A 和B 在nvarchar 列上有索引,而C 在varchar 列上有索引。
单独测试,加入B 比加入C 快30-60 倍。 (4 秒对 2-4 分钟。)查看执行计划,B 使用索引搜索,而C 使用索引扫描。 C 上的连接的详细信息提到了 varchar 列的隐式转换,而 B 上的连接没有提到这种转换。 这就是它使用扫描而不是查找的原因吗,这可能是它这么慢的原因吗?(另一个潜在问题:C 上的索引扫描估计执行次数为 1,但实际执行次数约为 8500。)
C 是静态历史数据,因此如果有帮助,我可以更改列并重建索引。
【问题讨论】:
标签: tsql indexing sql-server-2014