成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

你知道MySQL的Limit有性能問(wèn)題嗎

Arno / 616人閱讀

摘要:?jiǎn)栴}對(duì)于小的偏移量,直接使用來(lái)查詢沒(méi)有什么問(wèn)題,但隨著數(shù)據(jù)量的增大,越往后分頁(yè),語(yǔ)句的偏移量就會(huì)越大,速度也會(huì)明顯變慢。優(yōu)化思想避免數(shù)據(jù)量大時(shí)掃描過(guò)多的記錄解決子查詢的分頁(yè)方式或者分頁(yè)方式。

MySQL的分頁(yè)查詢通常通過(guò)limit來(lái)實(shí)現(xiàn)。

MySQL的limit基本用法很簡(jiǎn)單。limit接收1或2個(gè)整數(shù)型參數(shù),如果是2個(gè)參數(shù),第一個(gè)是指定第一個(gè)返回記錄行的偏移量,第二個(gè)是返回記錄行的最大數(shù)目。初始記錄行的偏移量是0。

為了與PostgreSQL兼容,limit也支持limit # offset #

問(wèn)題

對(duì)于小的偏移量,直接使用limit來(lái)查詢沒(méi)有什么問(wèn)題,但隨著數(shù)據(jù)量的增大,越往后分頁(yè),limit語(yǔ)句的偏移量就會(huì)越大,速度也會(huì)明顯變慢。

優(yōu)化思想

避免數(shù)據(jù)量大時(shí)掃描過(guò)多的記錄

解決

子查詢的分頁(yè)方式或者JOIN分頁(yè)方式。

JOIN分頁(yè)和子查詢分頁(yè)的效率基本在一個(gè)等級(jí)上,消耗的時(shí)間也基本一致。

下面舉個(gè)例子。一般MySQL的主鍵是自增的數(shù)字類型,這種情況下可以使用下面的方式進(jìn)行優(yōu)化。

下面以真實(shí)的生產(chǎn)環(huán)境的80萬(wàn)條數(shù)據(jù)的一張表為例,比較一下優(yōu)化前后的查詢耗時(shí):

-- 傳統(tǒng)limit,文件掃描
[SQL]SELECT * FROM tableName ORDER BY id LIMIT 500000,2;
受影響的行: 0
時(shí)間: 5.371s

-- 子查詢方式,索引掃描
[SQL]
SELECT * FROM tableName
WHERE id >= (SELECT id FROM tableName ORDER BY id LIMIT 500000 , 1)
LIMIT 2;
受影響的行: 0
時(shí)間: 0.274s

-- JOIN分頁(yè)方式
[SQL]
SELECT *
FROM tableName AS t1
JOIN (SELECT id FROM tableName ORDER BY id desc LIMIT 500000, 1) AS t2
WHERE t1.id <= t2.id ORDER BY t1.id desc LIMIT 2;
受影響的行: 0
時(shí)間: 0.278s

可以看到經(jīng)過(guò)優(yōu)化性能提高了將近20倍。

優(yōu)化原理

子查詢是在索引上完成的,而普通的查詢時(shí)在數(shù)據(jù)文件上完成的,通常來(lái)說(shuō),索引文件要比數(shù)據(jù)文件小得多,所以操作起來(lái)也會(huì)更有效率。因?yàn)橐〕鏊凶侄蝺?nèi)容,第一種需要跨越大量數(shù)據(jù)塊并取出,而第二種基本通過(guò)直接根據(jù)索引字段定位后,才取出相應(yīng)內(nèi)容,效率自然大大提升。

因此,對(duì)limit的優(yōu)化,不是直接使用limit,而是首先獲取到offset的id,然后直接使用limit size來(lái)獲取數(shù)據(jù)。

在實(shí)際項(xiàng)目使用,可以利用類似策略模式的方式去處理分頁(yè),例如,每頁(yè)100條數(shù)據(jù),判斷如果是100頁(yè)以內(nèi),就使用最基本的分頁(yè)方式,大于100,則使用子查詢的分頁(yè)方式。

相關(guān)文章

MySQL索引與查詢優(yōu)化

Windows操作系統(tǒng)安裝MySQL解壓版

MySQL 主鍵自增 Auto Increment用法

MySQL數(shù)據(jù)庫(kù)存儲(chǔ)引擎簡(jiǎn)介


文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/7299.html

相關(guān)文章

  • [靈魂拷問(wèn)]MySQL面試高頻100問(wèn)(工程師方向)

    摘要:黑客技術(shù)點(diǎn)擊右側(cè)關(guān)注,了解黑客的世界開發(fā)進(jìn)階點(diǎn)擊右側(cè)關(guān)注,掌握進(jìn)階之路開發(fā)點(diǎn)擊右側(cè)關(guān)注,探討技術(shù)話題作者丨呼延十排版丨團(tuán)長(zhǎng)前言本文主要受眾為開發(fā)人員所以不涉及到的服務(wù)部署等操作且內(nèi)容較多大家準(zhǔn)備好耐心和瓜子礦泉水前一陣系統(tǒng)的學(xué)習(xí)了一下也有 ...

    gyl_coder 評(píng)論0 收藏0
  • 運(yùn)維定位服務(wù)故障時(shí),前5分鐘都在忙啥?

    摘要:我們基本上都會(huì)從以下步驟入手,這些也是絕大多數(shù)運(yùn)維工程師在定位故障時(shí)前幾分鐘的主要排查點(diǎn)一盡可能搞清楚問(wèn)題的前因后果不要一下子就扎到服務(wù)器前面,你需要先搞明白對(duì)這臺(tái)服務(wù)器有多少已知的情況,還有故障的具體情況。 遇到服務(wù)器故障,問(wèn)題出現(xiàn)的原因很少可以一下就想到。我們基本上都會(huì)從以下步驟入手,這些也是絕大多數(shù)運(yùn)維工程師在定位故障時(shí)前幾分鐘的主要排查點(diǎn):一、盡可能搞清楚問(wèn)題的前因后果不要一下子就扎...

    tainzhi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<