萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql中SQL分頁優化的例子

mysql中SQL分頁優化的例子

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; www.111cn.net
SELECT * FROM your_table WHERE ID >= ( SELECT id FROM your_table ORDER BY id ASC LIMIT 1000001,1) LIMIT 20;

四、采用NoSQL或單獨的表作為索引表,或按數據新舊冷熱等規則分表存儲。

copyright © 萬盛學電腦網 all rights reserved