innodb中,在聚簇索引之上创建的索引称之为辅助索引,非聚簇索引都是辅助索引
innodb引擎通过搜索树方式实现索引,索引类型分为主键索引(聚集索引)和 二级索引(非主键索引)
主键索引树中,叶子结点保存着主键即对应行的全部数据
二级索引树中,叶子结点保存着索引值和主键值(先通过普通索引定位到主键值id=5;在通过主键索引定位到行记录;这个过程会有回表查询)
当使用二级索引进行查询时,需要进行回表操作
覆盖索引: 查询的列和查询条件的列全部包含在一个索引中,可以直接使用索引查询而不需要回表。这就是覆盖索引
覆盖索引是指索引中的列包含了数据处理中涉及的所有列,覆盖索引相当原始表的一个子集
通过使用覆盖索引,可以减少搜索树的次数,是常用的性能优化手段
例1:
name是一个索引:select id from table where name = aaa
由于name索引树的叶子结点上保存有username和id的值,通过name索引树查找到id后 就不需要在主键索引去查找了
例2:name是一个索引:select pwd from user_table where name = aaa
1、name索引树上找到name=aaa对应的主键id
2、通过回表在主键索引树上找到满足条件的数据
可以组建联合索引(name, pwd),这样,查询的时候就不需要再去回表操作了,可以提高查询效率
题外
前缀索引:
mysql的b+树索引遵循“最左前缀”原则
联合索引(username,pwd)注意查询顺序
例1:where username like ‘张%‘"
原文:https://www.cnblogs.com/webster1/p/12353272.html