在開發過程中我們經常會使用分頁,核心技術是使用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