mysql中分頁查詢是非常的簡單了同時也給我們大數據量帶來了一些麻煩,如果有100萬數據我們如果按普通的方法,我估計 你一條都查不出來,下面我來整理自己總結的mysql分頁優化方法,希望對各位同學會有所幫助.
SQL分頁過多時,例如 limit 1000000,20,效率會明顯降低下,如何優化?
SQLServer用的是類似:SELECT top 10 * FROM USER ORDER BY uid ASC ;
MySQL用的是類似:SELECT * FROM USER ORDER BY uid ASC LIMIT 0,10;
如果要顯示第二頁的數據,通常的做法是如下代碼:
SELECT * FROM USER ORDER BY uid ASC LIMIT 10,10;
這樣的問題是,當數據量過多,越往后翻頁速度越慢,那么有什么簡單的解決辦法嗎?如下幾種方式可參考:
一、如果是連續分頁查詢,可通過上次結果中的最大id,直接定位下一頁的數據集合.
1、第一頁,代碼如下:
SELECT * FROM USER ORDER BY uid ASC LIMIT 0,10;
2、找到最后一條記錄的uid,$uid 。
3、第二頁,代碼如下:
SELECT * FROM USER WHERE uid >$uid ORDER BY uid ASC LIMIT 0,10;
這樣的話,由于查詢出來的結果集合變小了,所以各方面效率都高,而且后面的limit條件基本不需要改變.
二、對于主見ID連續的表,可以先通過程序計算出所需分頁位置的 ID 起始值,然后通過BETWEEN .. AND 方式提交查詢.
三、使用子查詢獲取分頁主鍵值,充分利用主鍵索引,代碼如下:
- SELECT t.* FROM ( SELECT id FROM you_table ORDER BY id LIMIT 1000000, 20 ) s JOIN your_table t ON t.id = s.id; m.survivalescaperooms.com
- SELECT * FROM your_table WHERE ID >= ( SELECT id FROM your_table ORDER BY id ASC LIMIT 1000001,1) LIMIT 20;
四、采用NoSQL或單獨的表作為索引表,或按數據新舊冷熱等規則分表存儲.
新聞熱點
疑難解答