•聚集索引
•术语“聚集”指实际的数据行和相关的键值都保存在一起。每个表只能有一个聚集索引。但是,覆盖索引可以模拟多个聚集索引。存储引擎负责实现索引,因此不是所有的存储索引都支持聚集索引。当前,SolidDB和InnoDB是唯一支持聚集索引的存储引擎。
优点:
•可以把相关数据保存在一起。这样从磁盘上提取几个页面的数据就能把某个用户的邮件全部抓取出来。如果没有使用聚集,读取每个邮件都会访问磁盘。
•数据访问快。聚集索引把索引和数据都保存到了同一棵B-TREE中,因此从聚集索引中取得数据通常比在非聚集索引进行查找要快。
缺点:
•聚集能最大限度地提升I/O密集负载的性能。如果数据能装入内存,那么其顺序也就无所谓了。这样聚集就没有什么用处。
•插入速度严重依赖于插入顺序。更新聚集索引列是昂贵的,因为强制InnoDB把每个更新的行移到新的位置。
•建立在聚集索引上的表在插入新行,或者在行的主键被更新,该行必须被移动的时候会进行分页。
•聚集表可会比全表扫描慢,尤其在表存储得比较稀疏或因为分页而没有顺序存储的时候。
•第二(非聚集)索引可能会比预想的大,因为它们的叶子节点包含了被引用行的主键列。第二索引访问需要两次索引查找,而不是一次。 InnoDB的第二索引叶子节点包含了主键值作为指向行的“指针”,而不是“行指针”。 这种策略减少了在移动行或数据分页的时候索引的维护工作。使用行的主键值作为指针使得索引变得更大,但是这意味着InnoDB可以移动行,而无须更新指针。
(责任编辑:IT) |