一、为什么会造成二级查找
因为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
参考文献:延迟关联和覆盖索引