【发布时间】:2011-04-27 14:13:21
【问题描述】:
IMO,请纠正我...
聚集索引的叶子包含真正的表行,因此带有中间叶子的完整聚集索引包含比完整表更多的数据(?)
为什么/何时/如何选择整个聚集索引扫描而不是全表扫描?
如何在 SELECT 查询中使用 CUSTOMER_ID 列上的聚簇索引,该索引在 SELECT 列表或 WHERE 条件 [1] 中都不包含它?
更新:我应该明白全集群扫描比全表扫描快,因为“每个数据页都包含指向下一个和上一个叶节点页的指针,因此扫描不需要使用更高级别索引中的页面”?
是否有任何其他原因,例如(不参与查询)在排序中使用聚集索引?
更新 2:
事后考虑,连续访问无法提高性能,而通过 IAM 指针加载表可以并行化。
聚集索引扫描是否意味着连续的页面读取?
聚簇表是否意味着缺少 IAM 指针(不可能进行全表扫描)?
为什么聚簇表不能全表扫描?
我仍然不明白聚集索引全扫描如何/为什么比全表扫描“更好”。
这是否意味着拥有聚集索引会导致性能恶化?
问题是关于聚集表而不是堆(非索引)表。
更新3:
“全聚集索引扫描”真的是“全表扫描”的同义词吗?
有什么区别?
[1] 索引覆盖提升 SQL Server 查询性能
http://www.devx.com/dbzone/Article/29530
【问题讨论】:
-
聚集索引扫描不一定比表扫描快,但表扫描只发生在堆上(即没有聚集索引的表)。 “堆扫描”是表扫描的更准确名称,因为表是一种逻辑结构,而堆和索引是执行计划中使用的物理结构。
标签: sql-server database performance indexing clustered-index