mysql limit分頁優(yōu)化方法分享
更新時(shí)間:2011年04月23日 21:31:46 作者:
MySQL的優(yōu)化是非常重要的。其他最常用也最需要優(yōu)化的就是limit。MySQL的limit給分頁帶來了極大的方便,但數(shù)據(jù)量一大的時(shí)候,limit的性能就急劇下降。
同樣是取10條數(shù)據(jù)
select * from yanxue8_visit limit 10000,10 和
select * from yanxue8_visit limit 0,10
就不是一個(gè)數(shù)量級(jí)別的。
網(wǎng)上也很多關(guān)于limit的五條優(yōu)化準(zhǔn)則,都是翻譯自MySQL手冊(cè),雖然正確但不實(shí)用。今天發(fā)現(xiàn)一篇文章寫了些關(guān)于limit優(yōu)化的,很不錯(cuò)。
文中不是直接使用limit,而是首先獲取到offset的id然后直接使用limit size來獲取數(shù)據(jù)。根據(jù)他的數(shù)據(jù),明顯要好于直接使用limit。這里我具體使用數(shù)據(jù)分兩種情況進(jìn)行測(cè)試。(測(cè)試環(huán)境win2033+p4雙核 (3GHZ) +4G內(nèi)存 MySQL 5.0.19)
1、offset比較小的時(shí)候。
select * from yanxue8_visit limit 10,10
多次運(yùn)行,時(shí)間保持在0.0004-0.0005之間
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 10,1
) limit 10
多次運(yùn)行,時(shí)間保持在0.0005-0.0006之間,主要是0.0006
結(jié)論:偏移offset較小的時(shí)候,直接使用limit較優(yōu)。這個(gè)顯然是子查詢的原因。
2、offset大的時(shí)候。
select * from yanxue8_visit limit 10000,10
多次運(yùn)行,時(shí)間保持在0.0187左右
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 10000,1
) limit 10
多次運(yùn)行,時(shí)間保持在0.0061左右,只有前者的1/3。可以預(yù)計(jì)offset越大,后者越優(yōu)。
以后要注意改正自己的limit語句,優(yōu)化一下MySQL了
推薦人評(píng)論
MySQL的優(yōu)化是非常重要的。其他最常用也最需要優(yōu)化的就是limit。MySQL的limit給分頁帶來了極大的方便,但數(shù)據(jù)量一大的時(shí)候,limit的性能就急劇下降。
select * from yanxue8_visit limit 10000,10 和
select * from yanxue8_visit limit 0,10
就不是一個(gè)數(shù)量級(jí)別的。
網(wǎng)上也很多關(guān)于limit的五條優(yōu)化準(zhǔn)則,都是翻譯自MySQL手冊(cè),雖然正確但不實(shí)用。今天發(fā)現(xiàn)一篇文章寫了些關(guān)于limit優(yōu)化的,很不錯(cuò)。
文中不是直接使用limit,而是首先獲取到offset的id然后直接使用limit size來獲取數(shù)據(jù)。根據(jù)他的數(shù)據(jù),明顯要好于直接使用limit。這里我具體使用數(shù)據(jù)分兩種情況進(jìn)行測(cè)試。(測(cè)試環(huán)境win2033+p4雙核 (3GHZ) +4G內(nèi)存 MySQL 5.0.19)
1、offset比較小的時(shí)候。
select * from yanxue8_visit limit 10,10
多次運(yùn)行,時(shí)間保持在0.0004-0.0005之間
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 10,1
) limit 10
多次運(yùn)行,時(shí)間保持在0.0005-0.0006之間,主要是0.0006
結(jié)論:偏移offset較小的時(shí)候,直接使用limit較優(yōu)。這個(gè)顯然是子查詢的原因。
2、offset大的時(shí)候。
select * from yanxue8_visit limit 10000,10
多次運(yùn)行,時(shí)間保持在0.0187左右
Select * From yanxue8_visit Where vid >=(
Select vid From yanxue8_visit Order By vid limit 10000,1
) limit 10
多次運(yùn)行,時(shí)間保持在0.0061左右,只有前者的1/3。可以預(yù)計(jì)offset越大,后者越優(yōu)。
以后要注意改正自己的limit語句,優(yōu)化一下MySQL了
推薦人評(píng)論
MySQL的優(yōu)化是非常重要的。其他最常用也最需要優(yōu)化的就是limit。MySQL的limit給分頁帶來了極大的方便,但數(shù)據(jù)量一大的時(shí)候,limit的性能就急劇下降。
相關(guān)文章
MySQL數(shù)據(jù)庫的shell腳本自動(dòng)備份
這篇文章主要介紹了MySQL數(shù)據(jù)庫的shell腳本自動(dòng)備份的相關(guān)資料,網(wǎng)站或應(yīng)用的后臺(tái)都有備份數(shù)據(jù)庫的功能按鈕,但需要去手工執(zhí)行。我們需要一種安全的,每天自動(dòng)備份的方法需要的朋友可以參考下2017-03-03
insert into … on duplicate key update / replace into 多行數(shù)據(jù)介紹
當(dāng)我插入一條數(shù)據(jù)時(shí),我要判斷(k1,k2)是否已經(jīng)存在(1條selete),若存在就update,不存在就insert2013-08-08
Mysql使用函數(shù)json_extract處理Json類型數(shù)據(jù)的方法實(shí)例
在日常業(yè)務(wù)開發(fā)中通常mysql數(shù)據(jù)庫中某個(gè)字段會(huì)需要存儲(chǔ)json格式字符串,下面這篇文章主要給大家介紹了關(guān)于Mysql使用函數(shù)json_extract處理Json類型數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2022-09-09
MySQL命令行界面中出現(xiàn)字符錯(cuò)誤提示的原因及解決方法
這篇文章主要介紹了MySQL命令行界面中出現(xiàn)字符錯(cuò)誤提示的原因及解決方法,同時(shí)文中還附帶了MySQL導(dǎo)入亂碼問題的解決辦法提示,需要的朋友可以參考下2016-03-03
Mysql通過Adjacency List(鄰接表)存儲(chǔ)樹形結(jié)構(gòu)
本片介紹MYSQL存儲(chǔ)樹形結(jié)構(gòu)的一種方法,通過Adjacency List來實(shí)現(xiàn),一起來學(xué)習(xí)下。2017-12-12
SQL?Group?By分組后如何選取每組最新的一條數(shù)據(jù)
經(jīng)常在分組查詢之后,需要的是分組的某行數(shù)據(jù),例如更新時(shí)間最新的一條數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于SQL?Group?By分組后如何選取每組最新的一條數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2022-10-10

