这句话是什么意思:聚集索引物理存储在表中?

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)


Jam*_*ran 5

对于非聚簇索引,将创建一个单独的文件,该文件仅包含索引字段,该文件的记录按逻辑索引顺序放置。对于聚集索引,没有单独的文件-表本身(所有字段)中的数据按索引的逻辑顺序放置。

这样可以使索引查找更快(尽管实际上最好是索引,例如要查找范围的日期)。如果将记录插入到中间,插入也会很慢。