我正在测试一些要添加到视图内的表中的非聚集索引(具有 7 个内部连接)。在运行 Tunning Advisor (SQL Server 2008) 之后,它向我展示了一个脚本,用于在表 (a) 中创建一个非聚集索引,这可以帮助我优化查询。
在创建索引之前,我运行了查询并获得了 IO 和 TIME 统计信息:
a) **Scan count 2, logical reads 420**
b) Scan count 2, logical reads 6
c) **Scan count 2, logical reads 40**
d) Scan count 3, logical reads 12
e) Scan count 4, logical reads 28
f) Scan count 4, logical reads 16
g) Scan count 2, logical reads 4
h) Scan count 1, logical reads 3
CPU time = 172 ms, elapsed time = 397 ms.
创建非聚集索引后,我得到了这个:
a) **Scan count 16, logical reads 710**
b) Scan count 2, logical reads 6
c) **Scan count 2, logical reads 8**
d) Scan count 3, logical reads 12
e) Scan count 4, logical reads 28
f) Scan count 4, logical reads 16
g) Scan count 2, logical reads 4
h) Scan count 1, logical reads 3
CPU time = 187 ms, elapsed time = 335 ms.
检查行A和C ,我在A中读取了近 300 页,而在B中仅读取了 32页。那么为什么这个查询更快呢?我一直认为查询读取的页面越多,性能越差