原文地址:聚簇索引与非聚簇索引的区别
作者:菜鸟的成长
- 建立索引:
在SQL语言中,建立聚簇索引使用CREATE INDEX语句,格式为:CREATE CLUSTER INDEX index_name ON table_name(column_name1,column_name2,...);
- 存储特点:
- 聚集索引。表数据按照索引的顺序来存储的,也就是说索引项的顺序与表中记录的物理顺序一致。对于聚集索引,叶子结点即存储了真实的数据行,不再有另外单独的数据页。
在一张表上最多只能创建一个聚集索引,因为真实数据的物理顺序只能有一种。 - 非聚集索引。表数据存储顺序与索引顺序无关。对于非聚集索引,叶结点包含索引字段值及指向数据页数据行的逻辑指针,其行数量与数据表行数据量一致。
- 更新表数据
1、向表中插入新数据行
如果一张表没有聚集索引,那么它被称为
“堆集
”(
Heap)。这样的表中的数据行没有特定的顺序,所有的新行将被添加到表的末尾位置。
而建立了聚簇索引的数据表则不同:最简单的情况下,
插入操作根据索引找到对应的数据页,然后通过挪动已有的记录为新数据腾出空间,最后插入数据。如果数据页已满,则需要拆分数据页,调整索引指针(且如果表还有非聚集索引,还需要更新这些索引指向新的数据页
)。而类似于自增列为聚集索引的,数据库系统可能并不拆分数据页,而只是简单的新添数据页。
2、从表中删除数据行