limit 分頁優化方法
1.子查詢優化法
先找出第一條資料,然後大於等於這條資料的id就是要獲取的資料
缺點:資料必須是連續的,可以說不能有where條件,where條件會篩選資料,導致資料失去連續性
2.倒排表優化法
倒排表法類似建立索引,用一張表來維護頁數,然後通過高效的連線得到資料
缺點:只適合資料數固定的情況,資料不能刪除,維護頁表困難
3.反向查詢優化法
當偏移超過一半記錄數的時候,先用排序,這樣偏移就反轉了
缺點:order by優化比較麻煩,要增加索引,索引影響資料的修改效率,並且要知道總記錄數
,偏移大於資料的一半
limit偏移演算法:
正向查詢: (當前頁 - 1) * 頁長度
反向查詢: 總記錄 - 當前頁 * 頁長度
做下實驗,看看效能如何
總記錄數:1,628,775
每頁記錄數: 40
總頁數:1,628,775 / 40 = 40720
中間頁數:40720 / 2 = 20360
第21000頁
正向查詢sql:
sql**
**如下
複製**
select * from `abc` where `batchid` = 123 limit 839960, 40
反向查詢sql:
sql**
**如下
複製**
select * from `abc` where `batchid` = 123 order by inputdate desc limit 788775, 40
第30000頁
正向查詢sql:
sql**
**如下
複製**
1.select * from `abc` where `batchid` = 123 limit 1199960, 40
select * from `abc` where `batchid` = 123 limit 1199960, 40
反向查詢sql:
sql**
**如下
複製**
1.select * from `abc` where `batchid` = 123 order by inputdate desc limit 428775, 40
select * from `abc` where `batchid` = 123 order by inputdate desc limit 428775, 40
注意,反向查詢的結果是是降序desc的,並且inputdate是記錄的插入時間,也可以用主鍵聯合索引,但是不方便。
limit分頁優化
對於有大資料量的mysql表來說,使用limit分頁存在很嚴重的效能問題。查詢從第1000000之後的30條記錄 sql 1 平均用時6.6秒 select from cdb posts order by pid limit 1000000 30 sql 2 平均用時0.6秒 select from...
Limit分頁優化
1.直接用limit start,count分頁語句,也是我程式中用的方法 select from product limit start,count 當起始頁較小時,查詢沒有效能問題,我們分別看下從10,100,1000,10000開始分頁的執行時間 每頁取20條 如下 select from p...
LIMIT分頁優化
在系統中需要分頁的操作通常會使用limit加上偏移量的方法實現,同時加上合適的order by 子句。如果有對應的索引,通常效率會不錯,否則mysql需要做大量的檔案排序操作。乙個非常令人頭疼問題就是當偏移量非常大的時候,例如可能是limit 10000,20這樣的查詢,這是mysql需要查詢100...