成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

你知道MySQL的Limit有性能問題嗎

Arno / 669人閱讀

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

MySQL的分頁查詢通常通過limit來實(shí)現(xiàn)。

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

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

問題

對于小的偏移量,直接使用limit來查詢沒有什么問題,但隨著數(shù)據(jù)量的增大,越往后分頁,limit語句的偏移量就會越大,速度也會明顯變慢。

優(yōu)化思想

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

解決

子查詢的分頁方式或者JOIN分頁方式。

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

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

下面以真實(shí)的生產(chǎn)環(huán)境的80萬條數(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分頁方式
[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)過優(yōu)化性能提高了將近20倍。

優(yōu)化原理

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

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

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

相關(guān)文章

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

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

MySQL 主鍵自增 Auto Increment用法

MySQL數(shù)據(jù)庫存儲引擎簡介


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

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/7299.html

相關(guān)文章

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

    摘要:黑客技術(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)長前言本文主要受眾為開發(fā)人員所以不涉及到的服務(wù)部署等操作且內(nèi)容較多大家準(zhǔn)備好耐心和瓜子礦泉水前一陣系統(tǒng)的學(xué)習(xí)了一下也有 ...

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

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

    tainzhi 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<