測試環境
作業系統: 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條件時,優化的結果就不明顯了,甚至是優化的結果效率更差了
mysql中limit的優化
mysql的優化是非常重要的。其他最常用也最需要優化的就是limit。mysql的limit給分頁帶來了極大的方便,但資料量一大的時候,limit的效能就急劇下降。同樣是取10條資料 select from yanxue8 visit limit 10000,10 和 select from yan...
MySQL中limit的優化
1.子查詢優化法 先找出第一條資料,然後大於等於這條資料的id就是要獲取的資料 缺點 資料必須是連續的,可以說不能有where條件,where條件會篩選資料,導致資料失去連續性 2.倒排表優化法 倒排表法類似建立索引,用一張表來維護頁數,然後通過高效的連線得到資料 缺點 只適合資料數固定的情況,資料...
mysql做好Limit優化
使用mysql時,往往需要指定返回幾行資料,此時可以使用limit關鍵字來實現這個需求。limit子句可以被用於強制select查詢語句返回指定的記錄數量。通常情況下,limit關鍵字可以接受乙個或者兩個數字引數。需要注意的是,這個引數必須是乙個整數常量。如果使用者給定兩個引數,則第乙個引數表示第乙...