我可能错了,但是在互联网上似乎有不同的观点。SQL Server、MySQL、DB2和PostgreSQL对这些表的定义不同。
阅读了来自不同供应商(数据库手册、用户帖子等)的大量信息后,我能区分出三种感兴趣的表类型(对于这个问题来说,还有许多其他没有兴趣的表类型)。请耐心听我解释:
1. 堆表: - 所有行都存储在堆表中(可能无序)。 - 每行都有一个内部的ROWID来标识它。 - 索引是可选的。如果添加了索引,则包括索引列作为索引键以及ROWID(最终访问堆中的实际行)。 - 注意:这种情况对于这个问题没有兴趣,但我把它加在这里是为了和下面的第三种情况区别开来。
2. 纯索引表:<-- 这是一个聚集索引表吗? - 有一个主要的索引,包括关键列和非关键列。所有数据都存储在索引中。 - 数据按照主索引顺序排序,因此默认按主索引排序。 - 不需要堆表来存储行。所有数据已经在索引中。由于没有堆表,因此没有ROWID。 - SQL Server表(通常)默认属于此类别。 - MySQL InnoDB表似乎也属于此类别,因为它们似乎根本没有堆表。
3. 索引+排序堆表:<-- 这是一个聚集索引表吗? - 有一个主要的“聚集索引”。 - 有一个堆表,其中按照聚集索引定义的顺序存储行。 - 堆表中的每一行都有一个ROWID。 - 聚集索引不包括非关键列,但包括一个ROWID来访问堆表中的实际行。 - DB2似乎能够将表“聚集”起来。 - PostgreSQL似乎也将这些表称为“聚集索引”表。
现在,这2个或3个中哪个是“聚集索引表”?谁在说真话,谁在撒谎? :D
换句话说,术语“聚集索引表”是每个供应商随意定义的商业术语,还是根据某个官方数据库理论有一个唯一的官方定义?
阅读了来自不同供应商(数据库手册、用户帖子等)的大量信息后,我能区分出三种感兴趣的表类型(对于这个问题来说,还有许多其他没有兴趣的表类型)。请耐心听我解释:
1. 堆表: - 所有行都存储在堆表中(可能无序)。 - 每行都有一个内部的ROWID来标识它。 - 索引是可选的。如果添加了索引,则包括索引列作为索引键以及ROWID(最终访问堆中的实际行)。 - 注意:这种情况对于这个问题没有兴趣,但我把它加在这里是为了和下面的第三种情况区别开来。
2. 纯索引表:<-- 这是一个聚集索引表吗? - 有一个主要的索引,包括关键列和非关键列。所有数据都存储在索引中。 - 数据按照主索引顺序排序,因此默认按主索引排序。 - 不需要堆表来存储行。所有数据已经在索引中。由于没有堆表,因此没有ROWID。 - SQL Server表(通常)默认属于此类别。 - MySQL InnoDB表似乎也属于此类别,因为它们似乎根本没有堆表。
3. 索引+排序堆表:<-- 这是一个聚集索引表吗? - 有一个主要的“聚集索引”。 - 有一个堆表,其中按照聚集索引定义的顺序存储行。 - 堆表中的每一行都有一个ROWID。 - 聚集索引不包括非关键列,但包括一个ROWID来访问堆表中的实际行。 - DB2似乎能够将表“聚集”起来。 - PostgreSQL似乎也将这些表称为“聚集索引”表。
现在,这2个或3个中哪个是“聚集索引表”?谁在说真话,谁在撒谎? :D
换句话说,术语“聚集索引表”是每个供应商随意定义的商业术语,还是根据某个官方数据库理论有一个唯一的官方定义?