百萬數據下mysql分頁問題

在開發過程中我們經常會使用分頁,核心技術是使用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不連續的查詢。速度非??欤?/p>

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享