聚集索引是否有单独的索引文件?

Does clustered index have a separate index file?

聚簇索引有单独的索引文件还是 table 本身? 我从教科书中读到聚簇索引会改变实际文件的物理顺序。那么它需要一个单独的文件吗? 如果可能,请提供一个通用的答案,因为这是来自我的 texbook,它将这个主题描述为一个抽象概念,而不是特定于 dbms。 raghu ramakrishnan 的教科书 referred:Database 管理系统。 关系数据库管理系统:PostgreSQL 感谢所有试图提供帮助的人:)

您所解释的聚簇索引是对数据库文件本身中的数据进行重新排序。

在 90 年代,这在 dbase 中被广泛使用,但是在您构建它之后并没有太大帮助。不好的例子是 - 我的同事重新排序了 table 所以 id 1 在第一行,id 2 在第二行,id 42 在第 42 行。最后他能够访问 table 作为数组。

这在 Informix 中得到支持。

MySQL MyISAM 也支持此功能,但命令是 - 'alter table x order by name'。但是在 MySQL 中,数据库没有利用重新排序。唯一的问题是 - 如果你这样做 'select * ftom x where city=5',结果将按名称排序(注意 SQL 中没有排序)。

请注意,在您将一些数据插入数据库之前,聚簇索引一直存在。

所以回答 - 不,它没有额外的 space(文件)。然而,我并没有像书中建议的那样提供帮助。

PostgreSQL 没有聚集索引,所以这个问题没有实际意义。

PostgreSQL 确实有一个 CLUSTER 命令,但它重写了 table(及其索引),以便 table 之后按索引顺序进行物理排序。 table分出的索引和后面的其他索引没有区别,只是提供了排序。

此物理 table 顺序未保留,随后的 table 修改让顺序腐烂,因此您将不得不 运行 另一个 CLUSTER 过一会儿.另一个缺点是 table 是对并发读取的锁定,而 CLUSTER 是 运行ning.

你聚类一个 table 来加速索引范围扫描:如果相邻的索引条目指向同一个 table 块,你将大大减少 I/O,此外, I/O 往往是连续的。