Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 为什么/何时/如何选择整个聚集索引扫描而不是全表扫描?_Sql Server_Database_Performance_Indexing_Clustered Index - Fatal编程技术网

Sql server 为什么/何时/如何选择整个聚集索引扫描而不是全表扫描?

Sql server 为什么/何时/如何选择整个聚集索引扫描而不是全表扫描?,sql-server,database,performance,indexing,clustered-index,Sql Server,Database,Performance,Indexing,Clustered Index,国际海事组织,请纠正我… 聚集索引的叶包含实际表行,因此带有中间叶的完整聚集索引比完整表(?)包含更多的数据 为什么/何时/如何选择整个聚集索引扫描而不是整个表扫描 如果在选择列表或WHERE条件[1]中未包含客户ID列的选择查询中,如何使用客户ID列上的聚集索引 更新: 我是否应该理解,完全聚集扫描比完全表扫描更快,因为“每个数据页都包含指向下一个和上一个叶节点页的指针,因此扫描不需要使用索引中更高级别的页” 是否还有其他原因,例如(不参与查询)在排序中使用聚集索引 更新2: 事后想一想,连续

国际海事组织,请纠正我…
聚集索引的叶包含实际表行,因此带有中间叶的完整聚集索引比完整表(?)包含更多的数据
为什么/何时/如何选择整个聚集索引扫描而不是整个表扫描

如果在选择列表或WHERE条件[1]中未包含客户ID列的选择查询中,如何使用客户ID列上的聚集索引

更新:
我是否应该理解,完全聚集扫描比完全表扫描更快,因为“每个数据页都包含指向下一个和上一个叶节点页的指针,因此扫描不需要使用索引中更高级别的页”
是否还有其他原因,例如(不参与查询)在排序中使用聚集索引

更新2:
事后想一想,连续访问不能提高性能,而通过IAM指针加载表可以并行化。
聚集索引扫描是否意味着连续页面读取?
聚集表是否意味着缺少IAM指针(无法进行完整表扫描)?
为什么不能扫描群集表的完整表?
我仍然不明白为什么聚集索引完全扫描比完全表扫描“更好” 这是否意味着使用聚集索引会导致性能恶化

问题是关于集群表而不是堆(非索引)表

更新3:
“完全聚集索引扫描”真的是“完全表扫描”的同义词吗?
有什么区别

[1] 索引覆盖提高SQL Server查询性能

聚集索引-或者更准确地说:其叶页是表数据-因此聚集索引扫描实际上与表扫描相同(对于具有聚集索引的表)


如果您没有聚集索引,那么您的表就是一个堆-显然,在这种情况下,如果您需要查看所有数据,您就无法执行聚集索引扫描,因为没有聚集索引,因此您将进行一次表扫描,该扫描只涉及该堆表的所有数据页。

聚集索引的叶级是表。“表扫描”是指没有聚集索引的堆


每个数据页都包含指向下一个和上一个叶节点页的指针,因此扫描不需要使用索引中较高级别的页

请首先阅读我在“无法直接访问集群表中的数据行-为什么?”下的回答

聚集索引的叶包含实际表行,因此带有中间叶的完整聚集索引包含的数据比完整表的数据多得多(?)

请看,您将“表”与存储结构混为一谈。在您的问题的上下文中,例如,考虑CI的大小而不是“表”,那么您必须考虑CI减去叶级别(即数据行)。CI(仅索引部分)很小。中间级别(与任何B-树一样)包含部分(非全部)键条目;它排除了最低级别,即完整的键条目,它位于行本身,并且不重复

表(完整CI)可能为10GB。CI只能为10MB。有一个可怕的很多,可以确定从10MB,而不必到100GB

为便于理解:同一表格上的等效NCI(CI)可能为22MB;如果删除CI,则同一表上的等效NCI可能为21.5MB(假设CI键合理,而不是fat宽)

“为什么/何时/如何选择整个聚集索引扫描而不是整个表扫描?”


经常。同样,上下文是,我们讨论的是CI减去叶级别。对于只使用CI中的列的查询,CI中存在这些列(实际上是任何索引)允许查询成为“覆盖查询”,这意味着它可以完全从索引提供服务,而无需转到数据行。考虑部分键的范围扫描:在x和yY之间;x聚集索引扫描不一定比表扫描快,但表扫描只发生在堆上(即,没有聚集索引的表)。“堆扫描”是表扫描的更准确的名称,因为表是逻辑结构,而堆和索引是执行计划中使用的物理结构。