SQL在索引列性能上使用字符串函数

时间:2017-01-04 00:20:18

标签: sql sql-server performance indexing sql-server-2005

我有一个关于使用字符串函数及其对性能影响的一般性问题。 我在列ID上有一个非聚集索引的表。该列中包含20位数的varchar。 我跑的时候:

SELECT col1, col2 
FROM tbl
WHERE ID = '00000000009123548754' 

结果很快就会回来。 但是当我跑步时

SELECT col1, col2 
FROM tbl
WHERE RIGHT(ID, 10) = '9123548754'

这需要很长时间。 第一个查询的估计执行计划具有索引查找,其中第二个查询具有索引扫描。

据我所知,Seek与Scan相反是一个更快的原因,但为什么String Function Right()会产生这样的影响呢?

1 个答案:

答案 0 :(得分:2)

存在差异的原因是因为必须为每一行解析RIGHT(ID,10)以便对其进行过滤(因此扫描),而ID = '00000000009123548754'子句可以解析为简单的搜索

在技术方面,您的第一个查询是sargable,而第二个查询不是(由于该功能)。