濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > MySQL查詢中LIMIT的大offset導(dǎo)致性能低下淺析

MySQL查詢中LIMIT的大offset導(dǎo)致性能低下淺析

熱門標(biāo)簽:外呼系統(tǒng)防封號(hào)違法嗎 寶應(yīng)電信400電話辦理費(fèi)用 如何在高德地圖標(biāo)注新地址 湘潭電銷機(jī)器人咨詢電話 高德地圖標(biāo)注中心個(gè)人注冊(cè) 高德地圖標(biāo)注模式 400電話辦理都選易號(hào)網(wǎng) 外呼系統(tǒng)服務(wù) 電銷機(jī)器人針對(duì)的

前言

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

我們?cè)跇I(yè)務(wù)系統(tǒng)中難免少不了分頁(yè)的需求。想到分頁(yè)的時(shí)候,大家肯定會(huì)想到使用SQL中的LIMIT來(lái)實(shí)現(xiàn)。但是,如果不正確的使用LIMIT會(huì)導(dǎo)致性能問(wèn)題(SQL執(zhí)行得很慢、有可能會(huì)拖垮服務(wù)器),也會(huì)被領(lǐng)導(dǎo)批的;所以,我們來(lái)看看如何正確地使用LIMIT。

下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧

LIMIT OFFSET, ROW_COUNT 實(shí)現(xiàn)分頁(yè)

存在性能問(wèn)題的方式

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

寫出這樣SQL語(yǔ)句的人肯定心里是這樣想的:MySQL數(shù)據(jù)庫(kù)會(huì)直接定位到符合條件的第1000000位,然后再取30條數(shù)據(jù)。
然而,實(shí)際上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

大概的原理是:

  • 子查詢只用到了索引列,沒(méi)有取實(shí)際的數(shù)據(jù),所以不涉及到磁盤IO,所以即使是比較大的 offset,查詢速度也不會(huì)太差。

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

后記

未完待續(xù)。

參考資料

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • MySql分頁(yè)時(shí)使用limit+order by會(huì)出現(xiàn)數(shù)據(jù)重復(fù)問(wèn)題解決
  • 為什么MySQL分頁(yè)用limit會(huì)越來(lái)越慢
  • mysql優(yōu)化之query_cache_limit參數(shù)說(shuō)明
  • 詳解Mysql order by與limit混用陷阱
  • MySQL limit分頁(yè)大偏移量慢的原因及優(yōu)化方案
  • Mysql排序和分頁(yè)(order by&limit)及存在的坑
  • MySQL用limit方式實(shí)現(xiàn)分頁(yè)的實(shí)例方法
  • MySQL limit使用方法以及超大分頁(yè)問(wèn)題解決
  • 淺談MySQL分頁(yè)Limit的性能問(wèn)題
  • MySQL limit性能分析與優(yōu)化
  • MySQL 用 limit 為什么會(huì)影響性能

標(biāo)簽:蘭州 佛山 黔南 南充 黃山 賀州 宿遷 馬鞍山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL查詢中LIMIT的大offset導(dǎo)致性能低下淺析》,本文關(guān)鍵詞  MySQL,查詢,中,LIMIT,的大,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL查詢中LIMIT的大offset導(dǎo)致性能低下淺析》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于MySQL查詢中LIMIT的大offset導(dǎo)致性能低下淺析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    肥乡县| 临潭县| 家居| 固阳县| 威远县| 长白| 古浪县| 普陀区| 游戏| 岚皋县| 焦作市| 南川市| 武陟县| 济宁市| 岳阳市| 额敏县| 刚察县| 互助| 鲁山县| 稷山县| 沁阳市| 大悟县| 临颍县| 深圳市| 海盐县| 建昌县| 陕西省| 淳安县| 夹江县| 毕节市| 惠东县| 洪雅县| 桃园市| 浪卡子县| 宁乡县| 益阳市| 隆尧县| 徐州市| 桐城市| 汤阴县| 普陀区|