LIMIT分頁有什麼優化方法

2021-08-20 05:16:15 字數 1351 閱讀 8029

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...