程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> mysql的limit優化

mysql的limit優化

編輯:關於MYSQL數據庫

測試環境

操作系統: debian Linux

服務器版本: MySQL 5.0.24

MySQL數據庫的Qcache緩存關閉

數據庫表testtable的參數:

類型:     MyISAM 大小:     >80MB 記錄規模: >50000 字段數:   >25個字段

id是主鍵 leibIE字段上建有索引

進行數據分段測試

1>SQL不帶where條件的測試

1)50290行開始 顯示行 0 - 9 (10 總計, 查詢花費 0.2647 秒) SQL 查詢: SELECT * FROM `testtable` LIMIT 50290 , 10

顯示行 0 - 9 (10 總計, 查詢花費 0.0377 秒) SQL 查詢: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 50290 , 1 ) LIMIT 1 , 10

2)30290行開始

顯示行 0 - 9 (10 總計, 查詢花費 0.1527 秒) SQL 查詢: SELECT * FROM `testtable` LIMIT 30290 , 10

顯示行 0 - 9 (10 總計, 查詢花費 0.0208 秒) SQL 查詢: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 30290 , 1 ) LIMIT 1 , 10

3)20290行開始

顯示行 0 - 9 (10 總計, 查詢花費 0.1070 秒) SQL 查詢: SELECT * FROM `testtable` LIMIT 20290 , 10

顯示行 0 - 9 (10 總計, 查詢花費 0.0191 秒) SQL 查詢: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 20290 , 1 ) LIMIT 1 , 10

4)10290行開始

顯示行 0 - 9 (10 總計, 查詢花費 0.0707 秒) SQL 查詢: SELECT * FROM `testtable` LIMIT 10290 , 10

顯示行 0 - 9 (10 總計, 查詢花費 0.0087 秒) SQL 查詢: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 10290 , 1 ) LIMIT 1 , 10

5)5290行開始

顯示行 0 - 9 (10 總計, 查詢花費 0.0245 秒) SQL 查詢: SELECT * FROM `testtable` LIMIT 5290 , 10

顯示行 0 - 9 (10 總計, 查詢花費 0.0065 秒) SQL 查詢: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 5290 , 1 ) LIMIT 1 , 10

6)2590行開始

顯示行 0 - 9 (10 總計, 查詢花費 0.0140 秒) SQL 查詢: SELECT * FROM `testtable` LIMIT 2590 , 10

顯示行 0 - 9 (10 總計, 查詢花費 0.0050 秒) SQL 查詢: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 2590 , 1 ) LIMIT 1 , 10

7)1000行開始

顯示行 0 - 9 (10 總計, 查詢花費 0.0113 秒) SQL 查詢: SELECT * FROM `testtable` LIMIT 1000 , 10

顯示行 0 - 9 (10 總計, 查詢花費 0.0043 秒) SQL 查詢: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 1000 , 1 ) LIMIT 1 , 10

8)500行開始 顯示行 0 - 9 (10 總計, 查詢花費 0.0062 秒) SQL 查詢: SELECT * FROM `testtable` LIMIT 500 , 10

顯示行 0 - 9 (10 總計, 查詢花費 0.0037 秒) SQL 查詢: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 500 , 1 ) LIMIT 1 , 10

9)300行開始

顯示行 0 - 9 (10 總計, 查詢花費 0.0067 秒) SQL 查詢: SELECT * FROM `testtable` LIMIT 300 , 10

顯示行 0 - 9 (10 總計, 查詢花費 0.0055 秒) SQL 查詢: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 300 , 1 ) LIMIT 1 , 10

10)100行開始

顯示行 0 - 9 (10 總計, 查詢花費 0.0055 秒) SQL 查詢: SELECT * FROM `testtable` LIMIT 100 , 10

顯示行 0 - 9 (10 總計, 查詢花費 0.0112 秒) SQL 查詢: SELECT * FROM testtable WHERE id >= ( SELECT id FROM `testtable` LIMIT 100 , 1 ) LIMIT 1 , 10

2>SQL帶where條件的測試(滿足條件的數據記錄>5000)

1)990行開始

顯示行 0 - 1 (2 總計, 查詢花費 0.0086 秒) SQL 查詢: SELECT * FROM `testtable` WHERE leibIE = 1 LIMIT 990 , 10

顯示行 0 - 9 (10 總計, 查詢花費 0.0123 秒) SQL 查詢: SELECT * FROM `testtable` WHERE id >= ( SELECT id FROM `testtable` WHERE leibIE = 1 LIMIT 990 , 1 ) LIMIT 1 , 10

2)2990行開始 顯示行 0 - 9 (10 總計, 查詢花費 0.0502 秒) SQL 查詢: SELECT * FROM `testtable` WHERE leibIE = 1 LIMIT 2990 , 10

顯示行 0 - 9 (10 總計, 查詢花費 0.0357 秒) SQL 查詢: SELECT * FROM `testtable` WHERE id >= ( SELECT id FROM `testtable` WHERE leibIE = 1 LIMIT 2990 , 1 ) LIMIT 1 , 10

3)5690行開始

顯示行 0 - 9 (10 總計, 查詢花費 0.0547 秒) SQL 查詢: SELECT * FROM `testtable` WHERE leibIE = 1 LIMIT 5690 , 10

顯示行 0 - 9 (10 總計, 查詢花費 0.2101 秒) SQL 查詢: SELECT * FROM `testtable` WHERE id >= ( SELECT id FROM `testtable` WHERE leibIE = 1 LIMIT 5690 , 1 ) LIMIT 1 , 10

測試結論:

不帶where條件時,limit後的數字小於100時,正常的SQL語句效率比較高;limit後的數字大於100時,優化後的效率是沒有優化的1.2 - 7 倍. limit後的數字越大,優化後的效果越明顯.

帶where條件時,優化的結果就不明顯了,甚至是優化的結果效率更差了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved