3
对于使用字符串函数及其对性能的影响,我有一个常见问题。 我有一个列ID为非聚集索引的表。该列中有20位数字的varchar。 当我运行:在索引列性能上使用字符串函数的SQL
SELECT col1, col2
FROM tbl
WHERE ID = '00000000009123548754'
结果回来非常快。 但是当我运行时
SELECT col1, col2
FROM tbl
WHERE RIGHT(ID, 10) = '9123548754'
它需要很长时间。 第一个查询的估计执行计划有一个索引查找,其中第二个查询具有索引扫描。
我知道寻求反对扫描的原因之一是速度更快,但为什么字符串函数Right()会产生这样的影响?
如果有20个数字,那么第二个数字将不返回任何行。 –
那么,RIGHT()不能与您的索引基于的散列值一起使用,因此它必须评估每个ID值。根据您的查询尝试运行数据库引擎优化顾问,并查看它的内容。 – uncoder
什么版本的数据库你使用的是? – geofftnz