mysql百萬級資料分頁查詢緩慢優化方法

2022-08-16 15:27:23 字數 1990 閱讀 9562

參考**1:           -------------修改需求

一、與產品商討 修改需求

畫面是這樣的

**大概是這樣的select count(id) from …       查出總數

select * from …. limit m,n    查出分頁資料  

和前端的互動是這樣的你傳給我查詢條件和pagenum、pagesize

我給你返回total、resultlist

恩,可以開始預估開發時間了

「 使用者也不會管我們到底有多少條記錄,來這裡也只是做檢索而已,總數也可以去掉的,如果要統計資料量我們再單獨統計」

。。。理由還可以有很多,產品大大還是很好說話的

最後設計出來是這樣的

我給你資料資料 

總結重點是在傳統分頁方案上遇到的兩個問題

解決方案是產品和技術共同確認的結果,如果產品不接受,此方案不可行

查詢自身帶有排序條件,需要order by多欄位

二、優化sql查詢語句

1.子查詢優化法

先找出第一條資料,然後大於等於這條資料的id就是要獲取的資料

缺點:資料必須是連續的,可以說不能有where條件,where條件會篩選資料,導致資料失去連續性

實驗下mysql> set profi=1;

query ok, 0 rows affected (0.00 sec)

mysql> select count(*) from member;

+———-+

| count(*) |

+———-+

|   169566 |

+———-+

1 row in set (0.00 sec)

mysql> pager grep !~-

pager set to 『grep !~-『

mysql> select * from member limit 10, 100;

100 rows in set (0.00 sec)

mysql> select * from member where memberid >= (select memberid from member limit 10,1) limit 100;

100 rows in set (0.00 sec)

mysql> select * from member limit 1000, 100;

100 rows in set (0.01 sec)

mysql> select * from member where memberid >= (select memberid from member limit 1000,1) limit 100;

100 rows in set (0.00 sec)

mysql> select * from member limit 100000, 100;

100 rows in set (0.10 sec)

mysql> select * from member where memberid >= (select memberid from member limit 100000,1) limit 100;

2.倒排表優化法

倒排表法類似建立索引,用一張表來維護頁數,然後通過高效的連線得到資料

缺點:只適合資料數固定的情況,資料不能刪除,維護頁表困難

3.反向查詢優化法

當偏移超過一半記錄數的時候,先用排序,這樣偏移就反轉了

缺點:order by優化比較麻煩,要增加索引,索引影響資料的修改效率,並且要知道總記錄數

,偏移大於資料的一半

引用limit偏移演算法:

正向查詢: (當前頁 – 1) * 頁長度

反向查詢: 總記錄 – 當前頁 * 頁長度

MySQL百萬級資料分頁查詢優化方案

當需要從資料庫查詢的表有上萬條記錄的時候,一次性查詢所有結果會變得很慢,特別是隨著資料量的增加特別明顯,這時需要使用分頁查詢。對於資料庫分頁查詢,也有很多種方法和優化的點。下面簡單說一下我知道的一些方法。準備工作 為了對下面列舉的一些優化進行測試,下面針對已有的一張表進行說明。表名 order hi...

mysql百萬級資料分頁查詢緩慢優化 實戰

畫面是這樣的 大概是這樣的 select count id from 查出總數 select from limit m,n 查出分頁資料 和前端的互動是這樣的 你傳給我查詢條件和pagenum pagesize 我給你返回total resultlist 恩,可以開始預估開發時間了 面對這麼多的資料...

mysql 百萬級資料的模糊查詢 優化 筆記

最近老大給了乙個需求,是要寫乙個姓名的模糊查詢。問題很簡單,難度在於這張表有將近500w條資料。如果要做中文的模糊查詢,效率簡直慘不忍睹。網上查了一下資料,發現全文索引挺符合我的需要的。結果,使用下來。其實並不太符合我的要求。全文索引的最小單位是詞,如果不是在 in boolean mode 下是沒...