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