1 聚簇索引:clustered index 其实数据存储结构,索引和记录(全部)内容保存同一个结构中。“聚簇”就是索引和记录紧密在一起,分开就不是聚簇索引了,所以一张表只能有唯一的聚簇索引。附带问,能有多少二级索引呢?为什么?
2 非聚簇索引:secondary index ,叶子节点保存了主键值,要定位记录还要再查一遍聚簇索引。
3 覆盖索引:覆盖索引是指索引的叶子节点已包含所有要查询的列,因此不需要访问表数据(回表~~有学个名词,查询聚簇索引)
查找时能不能直接定位:聚簇索引的叶节点就是数据节点,而非聚簇索引的页节点仍然是索引检点,并保留一个链接指向对应数据块。
物理排序:聚簇索引对数据进行物理的排序,非聚簇索引不对数据进行物理排序
参考追风刀这个,实例分析聚簇索引不一定比非聚簇索引快~~~:
聚簇索引、非聚簇索引、覆盖索引 例子:http://csrd.aliapp.com/?p=406#more-406
覆盖索引:http://blog.csdn.net/dbanote/article/details/16822687
使用聚簇索引导致了全表扫描,加载每一页数据,使用非聚簇索引的sql语句使用范围查询缩小了范围。
一些DBMS允许用户指定聚簇索引,但是MySQL的存储引擎到目前为止都不支持。InnoDB对主键建立聚簇索引。如果你不指定主键,InnoDB会用一个具有唯一且非空值的索引来代替。如果不存在这样的索引,InnoDB会定义一个隐藏的主键,然后对其建立聚簇索引。