问题描述
@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往往是顺序的。