有如下解決方法:
(1)、通過判斷id的范圍來分頁
select id,LOG_CREATE_TIME,LOG_OPERATED_TYPE from LOG where id>5000000 limit 10;
也得到了分頁的數據,但是我們發現如果id不是順序的,也就是如果有數據刪除過的話,那么這樣分頁數據就會不正確,這個是有缺陷的。
(2)、通過between and 代替limit(前提:知道具體的位置)
(3)、通過連接查詢來分頁
我們可以先查詢500w條數據開始分頁的那10個id,然后通過連接查詢顯示數據
select id,LOG_CREATE_TIME,LOG_OPERATED_TYPE from LOG inner join(select id from LOG limit 5000000,10)as lim using(id);
優化分頁查詢的一個最簡單的方法就是盡可能地使用索引覆蓋掃描,而不是查詢所有的列。然后根據需要做一次關聯操作再返回所需的列。對於偏移量很大的時候,這樣做的效率會提升非常大。
例如,有如下查詢:
select id,LOG_WHO,LOG_CREATE_TIME,LOG_OPERATED_TYPE from LOG order by LOG_CREATE_TIME limit 5000000,10;
注:LOG_CREATE_TIME有一個btree索引


改寫后的性能:
select id,LOG_WHO,LOG_CREATE_TIME,LOG_OPERATED_TYPE from LOG inner join(select id from LOG order by LOG_CREATE_TIME limit 5000000,10)as lim using(id);


這里的“延遲關聯”將大大提升查詢效率,它讓mysql掃描盡可能少的頁面,獲取需要訪問的記錄后在根據關聯列回原表查詢需要的所有列,這個技術也可以用於優化關聯查詢中的limit子句。