您好,登錄后才能下訂單哦!
前言
我們大家都知道,mysql查詢使用select命令,配合limit,offset參數(shù)可以讀取指定范圍的記錄,但是offset過大影響查詢性能的原因及優(yōu)化方法
我們在業(yè)務(wù)系統(tǒng)中難免少不了分頁的需求。想到分頁的時(shí)候,大家肯定會(huì)想到使用SQL中的LIMIT來實(shí)現(xiàn)。但是,如果不正確的使用LIMIT會(huì)導(dǎo)致性能問題(SQL執(zhí)行得很慢、有可能會(huì)拖垮服務(wù)器),也會(huì)被領(lǐng)導(dǎo)批的;所以,我們來看看如何正確地使用LIMIT。
下面話不多說了,來一起看看詳細(xì)的介紹吧
LIMIT OFFSET, ROW_COUNT 實(shí)現(xiàn)分頁
存在性能問題的方式
SELECT * FROM myTable ORDER BY `id` LIMIT 1000000, 30
寫出這樣SQL語句的人肯定心里是這樣想的:MySQL數(shù)據(jù)庫會(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
大概的原理是:
對(duì)具體的原理分析感興趣的朋友可以看看這篇文章:MySQL ORDER BY / LIMIT performance: late row lookups
后記
未完待續(xù)。
參考資料
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。