首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >隐式转换强制索引扫描而不是搜索吗?

隐式转换强制索引扫描而不是搜索吗?
EN

Stack Overflow用户
提问于 2019-02-27 17:48:25
回答 1查看 138关注 0票数 1

我加入了A表,而表是BC。这三个表都有相似的列和索引,BC有大约相同的行数。但是ABnvarchar列的索引,而Cvarchar列的索引。

单独测试,在B上加入比加入C快30-60倍.(4秒对2-4分钟)查看执行计划,B使用索引查找,而C使用索引扫描。C上的联接的详细信息提到了varchar列的隐式转换,而B上的联接没有提到这种转换。这就是为什么它使用扫描而不是查找,这可能是它速度慢的原因吗?(另一个潜在的问题:C上的索引扫描估计有1次执行,但实际执行次数约为8500次)。

C是静态的历史数据,所以我可以修改列并重建索引(如果它有帮助的话)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-27 18:57:33

是的,隐式转换可能导致索引扫描而不是查找。使用较高的数据类型优先将数据转换为数据类型。正如您在本例中所看到的,表cc列被转换为NVARCHAR值。隐式转换可以防止在转换过程中丢失数据,即NVARCHAR列可以保存比VARCHAR更清晰的字符,因此从表C中隐式转换VARCHAR可以确保表C中的所有值被保留。关于特定隐式转换场景的详细信息将进一步概述这里。如果您有此选项,并且这不会在其他地方产生任何负面影响,我建议将表C中的这一列设置为NVARCHAR数据类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54911563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档