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

浙公网安备 33010602011771号