国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

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

2024-07-25 19:09:23
字體:
來源:轉載
供稿:網友

前言

我們大家都知道,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  ) qJOIN myTable tON  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

總結

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


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永靖县| 麟游县| 江都市| 内黄县| 习水县| 连平县| 玉屏| 金塔县| 喀喇沁旗| 托克逊县| 永修县| 昭觉县| 布拖县| 沂源县| 平原县| 建宁县| 福州市| 庆安县| 香河县| 察雅县| 龙口市| 天等县| 抚顺县| 南澳县| 库伦旗| 湛江市| 林芝县| 永靖县| 乌鲁木齐市| 荔浦县| 迭部县| 桐梓县| 天门市| 大埔县| 枣庄市| 洛浦县| 遂昌县| 昭通市| 克东县| 夏津县| 无为县|