Mysql-Innodb索引二次查找解决方案

一、为什么会造成二级查找

因为Innodb二级索引存储的是主键,所以通过索引查找时,第一次查询是通过二级索引找到主键值,第二次查询是通过主键在聚簇索引找到对应的行位置

二、解决方案

1. 索引覆盖

何为索引覆盖?只查找该索引的值。

select index_column from table 

只查找二级索引的值,则不需要在去聚簇索引进行二次查找

2.延时关联

先使用索引覆盖查找主键,再通过主键关联原表的数据

select * from orders o 
inner join 
(select order_id from orders  where addtime = '') o1 
ON o.order_id = o1.order_id;

在优化分页查询时用到了延时关联提高查询效率

select * from orders o1 
inner join 
(select order_id from orders order by addtime limit 1902,20) o2 
ON o1.order_id = o2.order_id

参考文献:延迟关联和覆盖索引

猜你喜欢

转载自blog.csdn.net/Yoga0301/article/details/80274235