在開發過程中我們常會使用分頁,核心技術是使用limit進行資料的讀取。在使用limit進行分頁的測試過程中,得到以下資料:
select * from news order by id desc limit 0,10 耗时0.003秒 select * from news order by id desc limit 10000,10 耗时0.058秒 select * from news order by id desc limit 100000,10 耗时0.575秒 select * from news order by id desc limit 1000000,10 耗时7.28秒
我們驚訝的發現mysql在資料量大的情況下分頁起點越大查詢速度越慢,100萬條起的查詢速度已經需要7秒鐘。這是我們無法接受的數值!
改進方案 1
select * from news where id > (select id from news order by id desc limit 1000000, 1) order by id desc limit 0,10
查詢時間 0.365秒,提升效率是非常明顯的! !原理是什麼呢? ? ?
我們使用條件對id進行了篩選,在子查詢(select id from news order by id desc limit 1000000, 1) 中我們只查詢了id這一個字段比起select * 或select 多個字段節省了大量的查詢開銷!
改進方案2
適合id連續的系統,速度極快!
select * from news where id between 1000000 and 1000010 order by id desc
不適合有條件的、id不連續的查詢。速度非常快!
以上是百萬數據下mysql分頁問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!