Mysql性能优化之覆盖索引
2017-09-30 16:30
429 查看
因为我们大多数情况下使用的都是Innodb,所以这篇博客主要依据Innodb来讲
b+树(图片来自网络)
b+树图来自网络
1.聚集索引与非聚集索引区别
聚集索引:叶子节点包含完整的数据(物理地址连续),叫做聚集索引
非聚集索引(又称辅助索引):它的叶子节点并不包含行记录的全部数据,叶子结点除了包含键值以外,每个叶子结点中的索引行还包含了一个书签,该书签用来告诉存储引擎可以在哪找到相应的数据行。需要引用主索引作为data域,其实原理就是直接通过辅助索引无法找到数据,需要通过辅助索引找到主键,然后再根据主索引去查找其对应叶子节点的数据。其过程就是(辅助索引+主键+columns值)。
2.分页需要优化原因
例:select a from table where b=1
①如果b字段没有索引,则数据库会进行全表扫描,扫描所有的数据库
②如果b字段有索引,索引需要扫描3个数据块
⑴获取所有b=1的主键与其rowid
⑵再根据rowid查找数据。
⑶如果数据不在该数据块回表,如果a在索引中则不会表。
其缓慢的原因其实是因为辅助索引需要回表去根据主键再去查询。
3.分页具体实现
例:select book_name,book_info from libary limit 20000,10 (表主键为其id)
覆盖索引:包含所有满足查询需要的索引成为覆盖索引
即(id,book_name,book_info)作为组合索引,就是覆盖索引的一种体现
b+树(图片来自网络)
b+树图来自网络
1.聚集索引与非聚集索引区别
聚集索引:叶子节点包含完整的数据(物理地址连续),叫做聚集索引
非聚集索引(又称辅助索引):它的叶子节点并不包含行记录的全部数据,叶子结点除了包含键值以外,每个叶子结点中的索引行还包含了一个书签,该书签用来告诉存储引擎可以在哪找到相应的数据行。需要引用主索引作为data域,其实原理就是直接通过辅助索引无法找到数据,需要通过辅助索引找到主键,然后再根据主索引去查找其对应叶子节点的数据。其过程就是(辅助索引+主键+columns值)。
2.分页需要优化原因
例:select a from table where b=1
①如果b字段没有索引,则数据库会进行全表扫描,扫描所有的数据库
②如果b字段有索引,索引需要扫描3个数据块
⑴获取所有b=1的主键与其rowid
⑵再根据rowid查找数据。
⑶如果数据不在该数据块回表,如果a在索引中则不会表。
其缓慢的原因其实是因为辅助索引需要回表去根据主键再去查询。
3.分页具体实现
例:select book_name,book_info from libary limit 20000,10 (表主键为其id)
覆盖索引:包含所有满足查询需要的索引成为覆盖索引
即(id,book_name,book_info)作为组合索引,就是覆盖索引的一种体现
相关文章推荐
- Mysql性能优化案例 - 覆盖索引分享
- Mysql性能优化案例研究-覆盖索引和SQL_NO_CACHE
- Mysql性能优化案例研究 - 覆盖索引和SQL_NO_CACHE
- 【MySQL】性能优化之 覆盖索引
- 【MySQL】性能优化之 覆盖索引
- Mysql性能优化案例研究-覆盖索引和SQL_NO_CACHE
- Mysql性能优化案例 - 覆盖索引分享
- Mysql性能优化案例 - 覆盖索引分享
- mysql:21个性能优化最佳实践之4[为搜索字段建索引]
- 由浅入深探究mysql索引结构原理、性能分析与优化
- MySQL性能优化的21个最佳实践 和 mysql使用索引
- mysql性能优化-慢查询分析、优化索引和配置
- Mysql性能优化实战:数据库锁的介绍与索引查找原理
- MySQL索引使用方法和性能优化
- mysql性能优化-慢查询分析、优化索引和配置
- [转]由浅入深探究mysql索引结构原理、性能分析与优化
- mysql性能优化-慢查询分析、优化索引和配置
- mysql性能优化-慢查询分析、优化索引和配置
- MySQL 性能优化---索引及优化
- MySQL性能优化的21个最佳实践 和 mysql使用索引