推荐一个优化分页查询的办法(分页数很大的情况)
生活随笔
收集整理的這篇文章主要介紹了
推荐一个优化分页查询的办法(分页数很大的情况)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
通常情況下我們都這樣這樣取分頁數據
?
SELECT SQL_NO_CACHE * FROM erp_orders ORDER BY id LIMIT 300000,10;
一般情況下,ORM生成的就是這種語句。
?
無論排序字段有沒有索引都有嚴重的性能問題,因為高偏移量會讓服務器花費更多的時間來掃描被丟掉的數據。
非規(guī)范化、預先計算、或緩存可能是解決這類查詢的唯一辦法,
一個更好的策略是限制讓用戶查看的頁數,
這樣并影響用戶的體驗,
因為沒有人會真正在意搜索結果的 第10000頁,
另外一個優(yōu)化這種查詢的好策略就是只提取最終需要的主鍵列,
然后把它再連接回去以取得所有需要的列,
這有助于優(yōu)化mysql必須進行的收 集最終會丟掉的數據工作。
這樣會讓服務器掃描很多需要丟掉的數據。
?
可以這樣:
先取出主鍵數據,再取出需要列的數據
?
SELECT SQL_NO_CACHE * FROM erp_orders o INNER JOIN(SELECT id FROM erp_orders ORDER BY id LIMIT 300000,10) AS t ON o.id=t.id;
?
實例測試
erp_orders 表 38萬數據
一、通常做法
SELECT SQL_NO_CACHE * FROM erp_orders ORDER BY id LIMIT 300000,10;?
需要約2.169s
二、優(yōu)化分頁
SELECT SQL_NO_CACHE * FROM erp_orders o INNER JOIN(SELECT id FROM erp_orders ORDER BY id LIMIT 300000,10) AS t ON o.id=t.id;?
用時0.077s
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的推荐一个优化分页查询的办法(分页数很大的情况)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一斤辣椒酱放多少油?
- 下一篇: 任务管理器显示不全 - 确定谁占用了我们