我有一个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次)?
答案 0 :(得分:6)
LEN
功能无法使用&#34;使用&#34;索引,但索引,只包含 此列,将占用比基表更少的空间。因此,扫描此索引比扫描基表更有效。
扫描基表将加载表中的所有其他列,即使它们不需要满足查询。