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

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

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

二、解决方案

1. 索引覆盖

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

1
select index_column from table

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

2.延时关联

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

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

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

1
2
3
4
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

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


评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×