一、索引简介
索引是数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
数据库索引的基本结构是B+树,当然会有一些优化和变种,下面介绍Mysql两种主要的索引Innodb和MyISAM。
二、索引分类
1、InnoDB索引(聚簇索引)
InnoDB索引文件和数据文件是分离的,索引节点仅保存数据记录的地址,叶子节点保存完整数据记录。
因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键。InnoDB的辅助索引data域存储相应记录主键的值而不是地址。因此如果主索引过长,会使得副索引很大。
2、MyISAM索引(非聚簇索引)
MyISAM索引的索引文件保存数据地址,即索引和数据是在同一个节点里的。
主索引和副索引结构上没有区别,只不过主索引的key是唯一的。
3、两种索引区别
- 范围查找,聚簇索引更快。
- 插入效率,聚簇索引要考虑页分裂;而非聚蔟索引要考虑多索引更新。
三、索引创建原则
- 索引会占空间,不是越多越好,且会影响insert、update效率。
- 尽量选择数据值比较短的索引,因为字段越长,匹配的成本越高。
- 尽量扩展索引为联合索引,而不是建多个索引。
- 对于聚蔟索引,select语句不一定要select *,如果只select几个索引值,那么可以只走索引不查数据,效率会更高。