存储引擎InnoDB
索引是一种数据结构(本质是对数据排序),能提高我们的查询速度:运用 局部性原理
索引采用的数据结构:Hash索引(key-value)和B+树索引(多路平衡查询树)
Hash索引(key-value)和B+树索引区别:
- 哈希索引只适用于等值查询的场景,但无法进行范围查询
- 哈希索引无法利用索引进行排序
- 哈希索引不支持多列联合索引的最左匹配原则
- 如果有大量重复键值得情况下,哈希索引的效率很低,因为存在哈希碰撞
聚簇索引(叶子节点存储 整行数据)与非聚簇索引(主键值)
覆盖索引:一个查询语句只需要从索引取得,不必从数据表中读取
因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有)
如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键
如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键
索引的最左匹配特性
叶子节点存储真实数据(索引字段要尽量小,降低树的高度)
辅助索引:data域记录主键的值,而不是地址
辅助索引搜索:
1.检索辅助索引获得主键,
2.利用主键,到主索引中检索获得记录
在使用InnoDB存储引擎时,如果没有特别的需要,请永远使用一个与业务无关的自增字段作为主键
Mysql5.6对对索引引入了哪些优化:
索引下推技术(有了索引下推可以在有like的情况下,减少回表次数)
查询优化器(explain select。。。 )
在一条单表查询语句真正执行之前,MySQL的查询优化器会找出执行该语句所有可能使用的方案,对比之后找出成本最低的方案。
优化过程大致如下:
1、根据搜索条件,找出所有可能使用的索引
2、计算全表扫描的代价
3、计算使用不同索引执行查询的代价
4、对比各种执行方案的代价,找出成本最低的那一个