參考**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 下是沒...