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

问题描述

@H_404_0@聚集索引是否具有单独的索引文件,还是表本身? 我从教科书中了解到,聚集索引会更改实际文件的物理顺序。那么它需要一个单独的文件吗? 如果可能的话,请提供一个通用的答案,因为这是从我的texbook中获得的,该主题将该主题声明为抽象概念,而不是特定于dbms。 参考教材:raghu ramakrishnan编写的数据库管理系统。 RDBMS:Postgresql 感谢所有尝试提供帮助的人:)

解决方法

按照您解释的方式,聚簇索引将对数据库文件本身中的数据进行重新排序。

在90年代,它在dbase中得到了广泛的使用,但是在构建它之后并没有太大帮助。不好的例子是-我的同事对表进行了重新排序,因此ID 1在第一行,ID 2在第二行,ID 42在42行。最后他能够以数组的形式访问该表。

Informix支持此功能。

MySQL MyISAM也支持此功能,但是有命令-“更改表x按名称顺序”。但是在MySQL中,数据库不利用重新排序的优势。唯一的事情是-如果您执行'select * ftom x where city = 5',则结果将按名称排序(注意,SQL中没有排序依据)。

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

所以答案-不,它没有额外的空间(文件)。但是我没有书所建议的那样帮助。

,

PostgreSQL没有聚集索引,所以这个问题没有解决。

PostgreSQL确实有一个CLUSTER命令,但是该命令重写了一个表(及其索引),以便此后该表按索引顺序进行物理排序。整理该表的索引之后,它与其他索引没有什么不同,它只是提供了排序。

此物理表顺序未保留,随后的表修改使该顺序失效,因此一段时间后,您将不得不运行另一个CLUSTER。另一个缺点是,在CLUSTER运行时,该表被锁定为并发读取。

将表聚类以加快索引范围扫描:如果相邻的索引条目指向同一表块,则I / O会大大减少,此外,该I / O往往是顺序的。