MySQL 基础优化

回表

1 数据库中的表长成什么样?

MySQL 用来存储数据行的逻辑结构,表的数据行最终存储到了很多的page上

InnoDB存储引擎,会按照聚簇索引有序的组织存储表数据到各个区的连续的页上。
这些连续的数据页,成为了聚簇索引的叶子节点。你可以认为聚簇索引就是原表数据。
所以,回表即是,回聚簇索引。

1.2 什么时候回表

辅助索引:将辅助索引列值 + ID主键值,构建辅助索引B树结构。
用户使用,辅助索引列作为条件查询时,首先扫描辅助索引的B树。
1. 如果辅助索引能够完全覆盖我们的查询结果时,就不需要回表了。
2. 如果不能完全覆盖到,只能通过得出的ID主键值,回到聚簇索引(回表)扫描,最终得到想要的结果。

1.3 回表会带来什么影响?

1. IO量级变大
2. IOPS会增大
3. 随机IO

1.4 怎么减少回表

1. 将查询尽可能用ID主键查询

2. 设计合理的辅助索引 完全覆盖 select name,age,gender from t1 where name='zs';
3. 更精确的查询条件+联合索引 select * from t1 where name='zs' and addr ='bj';
4. 优化器算法:MRR (扩展内容)

 

1. s索引的自优化

AHI: 自适应HASH索引,加速索引页的访问。
Change buffer:在做 insert, update,delete 操作时,会将辅助索引更新临时存储到change buffer中。
之后使用时,会自动进行merge.

2. 优化器的算法:(DBA面试)

ICP
SMLJ
BNL
BKA
画图说明

设置方法:

1. set
2. my.cnf
3. hints

 

posted @ 2020-08-02 08:53  丁海龙  阅读(119)  评论(0)    收藏  举报