MYSQL分页查询偏移量过大的优化方案

前提:

出现这种问题的原因是因为mysql在进行分页的时候,并不知直接插rows的数据,而是把offset和rows的数据全部查出来,然后再将offset的数据扔掉,返回rows的数据;

第一种解决办法:

symptom_id是主键,表里面221W数据

优化前####### 42s                     

select * from symptom ORDER BY create_date desc limit 2210000, 15   

 内连接优化后####### 7s

SELECT t1.* FROM symptom t1

INNER JOIN ( SELECT symptom_id FROM symptom ORDER BY create_date DESC LIMIT 2210000, 15 ) t2

ON t1.symptom_id = t2.symptom_id

7秒钟的时间大多花费在排序字段上,在create_date上建立索引后总耗时 0.5s !!!!!!!!!!!!!

第二种解决办法:

在业务允许的情况下限制页数,可以看到百度和google都是这么做的;

第三种解决办法:

如果id是连续自增的,可以用

select * from symptom where id > 1250000 limit 15

原文地址:https://www.cnblogs.com/zhanzhuang/p/13063681.html