日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL查询中LIMIT的大offset导致性能低下浅析

發布時間:2024/9/20 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL查询中LIMIT的大offset导致性能低下浅析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇文章主要給大家介紹了關于MySQL查詢中LIMIT的大offset導致性能低下的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

我們大家都知道,mysql查詢使用select命令,配合limit,offset參數可以讀取指定范圍的記錄,但是offset過大影響查詢性能的原因及優化方法

我們在業務系統中難免少不了分頁的需求。想到分頁的時候,大家肯定會想到使用SQL中的LIMIT來實現。但是,如果不正確的使用LIMIT會導致性能問題(SQL執行得很慢、有可能會拖垮服務器),也會被領導批的;所以,我們來看看如何正確地使用LIMIT。

下面話不多說了,來一起看看詳細的介紹吧

LIMIT OFFSET, ROW_COUNT 實現分頁

存在性能問題的方式

?

1

SELECT * FROM myTable ORDER BY `id` LIMIT 1000000, 30

寫出這樣SQL語句的人肯定心里是這樣想的:MySQL數據庫會直接定位到符合條件的第1000000位,然后再取30條數據。
然而,實際上MySQL不是這樣工作的。

LIMIT 1000000, 30 的意思是:掃描滿足條件的1000030行,扔掉前面的1000000行,然后返回最后的30行。

較好的方式

?

1

2

3

4

5

6

7

8

9

10

SELECT t.*

FROM (

??SELECT id

??FROM myTable

??ORDER BY

????id

??LIMIT 1000000, 30

??) q

JOIN myTable t

ON? t.id = q.id

大概的原理是:

  • 子查詢只用到了索引列,沒有取實際的數據,所以不涉及到磁盤IO,所以即使是比較大的 offset,查詢速度也不會太差。

對具體的原理分析感興趣的朋友可以看看這篇文章:MySQL ORDER BY / LIMIT performance: late row lookups

后記

未完待續。

參考資料

  • Why does MYSQL higher LIMIT offset slow the query down?
  • MySQL ORDER BY / LIMIT performance: late row lookups

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

來源:https://www.jb51.net/article/152041.htm

總結

以上是生活随笔為你收集整理的MySQL查询中LIMIT的大offset导致性能低下浅析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。