tsql - 隐式转换是否强制索引扫描而不是搜索?
问题描述
我正在加入表A
反对表B
和C
。所有三个表都具有相似的列和索引,B
并且C
具有大致相同的行数。但是A
并且B
在列上有索引,而在nvarchar
列上C
有索引varchar
。
单独测试,加入B
比 join on 快 30-60 倍C
。(4 秒对 2-4 分钟。)查看执行计划,B
使用索引搜索,同时C
使用索引扫描。join on 的细节C
提到了列的隐式转换varchar
,而 join onB
没有提到这样的转换。这就是为什么它使用扫描而不是搜索的原因吗,这可能是它这么慢的原因吗?(另一个潜在问题:索引扫描C
的估计执行次数为 1,但实际执行次数约为 8500。)
C
是静态历史数据,因此如果有帮助,我可以更改列并重建索引。
解决方案
推荐阅读
- email - Mailchimp DATE Merge Tag in URL updating after email sent
- python-3.x - 如何获得刻度标签、xlabel 或 ylabel 的扩展?
- c# - 如果我使用长时间运行的子窗口,如何停止 wpf 中的自动锁定功能?
- php - 使用ajax读取加密的php文件
- javascript - vuex : $store.commit vs 直接调用函数
- c# - 使用 Byte.Parse 方法将字符串转换为字节
- java - 为带有条件的电子邮件 ID 验证创建正则表达式
- angular - @angular/fire:如何使用 startAt() 和 endAt() 检索结果
- java - 如何处理来自可完成未来链的任何步骤的错误响应?
- c# - 如何处理带有 MVC 'Area' 部分的链接