在一个数据量比较大的表里面分页查询,按照常规查询可能耗时比较多,下面提供一个优化小技巧:
1、原始查询
select * from zb_articleceiresultperformance where pubday = '20210908' limit 1,10
耗时: 3.048801 sec
2、优化之后查询
SELECT
*
FROM
zb_articleceiresultperformance main
RIGHT JOIN ( SELECT id FROM zb_articleceiresultperformance WHERE pubday = '20210908' LIMIT 1, 10 ) temp_table ON main.id = temp_table.id
耗时:0.367586 sec
3、原理
总结:回表查询就是先定位主键值,再定位行记录,它的性能较扫一遍索引树更低。
优化办法:覆盖索引
如何实现覆盖索引
常见的方法是:将被查询的字段,建立到联合索引里去。
select id,name,age from user where age = 10
使用索引覆盖:建组合索引idx_age_name(age,name)即可