MySQL 分頁優化
阿新 • • 發佈:2018-03-01
明顯 並不是 sql log family soft blog offset device
MySQL 用 LIMIT offset, length 進行分頁。但當表記錄數很大,會發現大頁數的查詢時間明顯比小頁數的查詢時間大。
MySQL並不是跳過 offset 行,而是取 offset+N 行,然後返回放棄前 offset 行,返回 N 行,當 offset 特別大的時候,效率就非常的低下
解決方式一:在業務上限制總頁數。
解決方式二:借助索引,快速定位。
方式二是比較常用的。
示例:device_version_stat 表記錄數很大,如果需要把該表的數據導出到 excel ,後面的數據查詢會相對慢。如果是按 id 降序,可以借助 id 主鍵先快速定位到查詢範圍,
第一頁的 maxId = null,第二頁的 maxId = 具體的某個值1,第二頁的 maxId = 具體的某個值2,...
在查詢時帶上以下條件,查詢效率就會高很多,
<if test="@Ognl@isNotEmpty(minId)">
AND id > #{minId}
</if>
<if test="@Ognl@isNotEmpty(maxId)">
AND id < #{maxId}
</if>
MySQL 分頁優化