亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL查詢中LIMIT的大offset導致性能低下淺析

發布時間:2020-10-01 06:34:29 來源:腳本之家 閱讀:452 作者:craneyuan 欄目:MySQL數據庫

前言

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

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

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

LIMIT OFFSET, ROW_COUNT 實現分頁

存在性能問題的方式

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

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

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

較好的方式

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

總結

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

当涂县| 岑巩县| 定襄县| 南靖县| 伊吾县| 昔阳县| 白河县| 郓城县| 泰州市| 社会| 绵竹市| 台安县| 攀枝花市| 乌海市| 沈丘县| 比如县| 扬中市| 阳谷县| 聂拉木县| 阿拉尔市| 镇赉县| 上林县| 筠连县| 澄江县| 商南县| 千阳县| 南雄市| 南岸区| 巢湖市| 隆化县| 张掖市| 合水县| 柘城县| 东光县| 铜川市| 崇仁县| 容城县| 张家界市| 阿鲁科尔沁旗| 敦化市| 色达县|