前提:
出現這種問題的原因是因為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