mysql聚集索引,辅助索引,联合索引,覆盖索引
2018-03-22 21:06
453 查看
聚集索引:
一个表中只能有一个,聚集索引的顺序与数据真实的物理存储顺序一致。查询速度贼快,聚集索引的叶子节点上是该行的所有数据,数据索引能加快范围查询(聚集索引的顺序和数据存放的逻辑顺序一致)。主键!=聚集索引。
辅助索引(非聚集索引):
一个表中可以有多个,叶子节点存放的不是一整行数据,而是键值,叶子节点的索引行中还包含了一个'书签',这个书签就是指向聚集索引的一个指针,从而在聚集索引树中找到一整行数据。联合索引:
就是由多列组成的的索引。遵循最左前缀规则。对where,order by,group by 都生效覆盖索引:
指从辅助索引中就能获取到需要的记录,而不需要查找聚集索引中的记录。使用覆盖索引的一个好处是因为辅助索引不包括一条记录的整行信息,所以数据量较聚集索引要少,可以减少大量io操作。聚集索引与辅助索引的区别:
叶子节点是否存放的为一整行数据最左前缀规则:
假设联合索引由列(a,b,c)组成,则一下顺序满足最左前缀规则:a、ab、abc;selece、where、order by 、group by都可以匹配最左前缀。其它情况都不满足最左前缀规则就不会用到联合索引。order by排序分为file sort和index,后者效率更高
以下情况不会使用index排序
1、检查的行数过多,并且没有使用覆盖索引。2、使用了多个索引,mysql一次只会采用一个索引。
3、对索引列同时使用了ASC和DESC。 通过where语句将order by中索引列转为常量,则除外。
4、where与order by使用了不同的索引,与第二条类似
5、where或者ORDER BY中索引列使用了表达式(+1,-1这种操作),包括函数表达式。参见第8,9句
6、where 与ORDER BY组合满足最左前缀,但where中使用了范围查询。
7、order by中加入了非索引列,且非索引列不在where中。
8、order by或者它与where组合没有满足索引最左前列。
9、当使用left join,使用右边的表字段排序。
相关文章推荐
- 聚集索引、非聚集索引、聚集索引组织表、堆组织表、Mysql/PostgreSQL对比、联合主键/自增长、InnoDB/MyISAM(引擎方面另开一篇)
- Mysql (InnoDB引擎)聚集索引和辅助索引
- Mysql中的联合索引、前缀索引、覆盖索引
- 聚集索引、辅助索引、覆盖索引、联合索引
- MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析
- SQL Server中的联合主键、聚集索引、非聚集索引、mysql 联合索引
- MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析
- MySQL中的聚集索引和辅助索引知识详解
- MySQL的联合索引和覆盖索引
- mysql高效索引之覆盖索引
- Mysql性能优化案例 - 覆盖索引分享
- mysql 联合索引
- mysql添加联合唯一索引
- MySQL索引 聚集索引
- 学习笔记--mysql索引(五) 聚簇索引和覆盖索引
- MySQL 联合索引与Where子句的优化 提高数据库运行效率
- MySQL_索引_mysql高效索引之覆盖索引
- mysql优化-----索引覆盖
- [MySQL] 索引覆盖
- mysql 复合索引,联合索引