mas*_*ani 16 sql-server indexing clustered-index
群集索引如何存储在硬盘上?什么是逻辑顺序?
非聚集索引如何工作?
Qua*_*noi 22
这意味着表中的数据B-Tree按照CLUSTERED PRIMARY KEY(或聚类列)的顺序存储.
这个名字在我看来有点令人困惑.Oracle调用了相同的概念index-organized table,我发现它更具描述性.
非聚集索引包含索引列的值以及指向它们源自的记录的指针.
"聚集索引"是表本身; "非聚集"索引是某些表列的有序副本.
如果"创建"聚簇索引,则会重新排列表.这就是为什么你不能在一个表上拥有多个"聚集索引"的原因:该表不能以多个顺序排列.
如果创建辅助索引,则会创建表的卷影副本,其中包含索引列的值以及指向它们的记录的指针.每当表更改时,副本也会更改(引擎会自动处理).
id col1 value
-- -- --
1 1 Data 1
6 1 Data 6
3 1 Data 3
7 2 Data 7
9 2 Data 9
5 2 Data 5
Run Code Online (Sandbox Code Playgroud)
该表未订购.
id col1 value
-- -- --
1 1 Data 1
3 1 Data 3
5 2 Data 5
6 1 Data 6
7 2 Data 7
9 2 Data 9
Run Code Online (Sandbox Code Playgroud)
该表是订购的id.
Table Index
id col1 value col1 id
-- -- -- -- --
1 1 Data 1 1 1
3 1 Data 3 1 3
5 2 Data 5 1 6
6 1 Data 6 2 5
7 2 Data 7 2 7
9 2 Data 9 2 9
Run Code Online (Sandbox Code Playgroud)
该表是orderer on id,索引是按顺序排列的(col1, id)
对于非聚簇索引,将创建一个单独的文件,该文件仅包含索引字段,该文件的记录按逻辑索引顺序放置。对于聚集索引,没有单独的文件-表本身(所有字段)中的数据按索引的逻辑顺序放置。
这样可以使索引查找更快(尽管实际上最好是索引,例如要查找范围的日期)。如果将记录插入到中间,插入也会很慢。