为什么Len功能可以使用索引?

时间:2015-04-23 08:33:08

标签: sql-server clustered-index non-clustered-index

我有一个145000行的表。并且没有任何索引。

当我在sql下运行时。我按预期在执行计划上找到了表扫描。它生成六行和3481逻辑读取。

SET STATISTICS IO ON
SELECT columnA FROM table WHERE LEN(columnA)<>5

然后我在columnA上添加聚簇索引并运行sql.I在执行计划中找到了一个聚簇索引扫描。它生成六行和3511逻辑读取。我可以理解读取B树节点的更大逻辑读数。

但令我困惑的是,我在columnA上使用非聚集索引而不是聚簇索引并运行sql。我在执行计划上找到了索引扫描。它生成六行,只需要417个逻辑读取!

我不认为len()函数可以利用索引。但是为什么columnA上的非聚集索引会减少逻辑读取次数(9次)?

1 个答案:

答案 0 :(得分:6)

LEN功能无法使用&#34;使用&#34;索引,但索引,只包含 此列,将占用比基表更少的空间。因此,扫描此索引比扫描基表更有效。

扫描基表将加载表中的所有其他列,即使它们不需要满足查询。