MySQL?原理與優(yōu)化之Limit?查詢優(yōu)化

假設(shè)有表tb_sku,其表結(jié)構(gòu)如下:

表中大約有200w條記錄,執(zhí)行如下的sql 語(yǔ)句大約 4.36s 返回?cái)?shù)據(jù)
select count(*) from tb_sku;

接著我們使用 對(duì)其進(jìn)行分頁(yè)查找:
select * from tb_sku limit 0,10;
limit 語(yǔ)句 其中0 代表起始位置,10 為每頁(yè)返回的數(shù)據(jù)數(shù)量。

如上圖所示,很快就返回了查詢結(jié)果。
接著我們?cè)偈褂肧QL 語(yǔ)句
select * from tb_sku limit 10,10;
語(yǔ)句從記錄位置10的位置開始再往下返回10 條記錄,也就是第二頁(yè)的信息。其返回時(shí)間也是比較快。
然后,我們加大起始位置 到100w如下:
select * from tb_sku limit 1000000,10;

此時(shí)返回時(shí)間需要0.74 s,這說明了使用limit 對(duì)大數(shù)據(jù)量的表進(jìn)行分頁(yè),位置越靠后效率越低。拿上面的例子來說,limit 會(huì)先對(duì) 100w 的數(shù)據(jù)進(jìn)行排序,然后再返回10 條數(shù)據(jù),而且僅僅返回100w 到 100w 零10條 的記錄,其他查詢的記錄都會(huì)丟棄掉,這種做法查詢排序的代價(jià)非常大。
由此我們需要對(duì)大數(shù)據(jù)量表進(jìn)行l(wèi)imit 操作進(jìn)行優(yōu)化,官方給出的方案是通過覆蓋索引和子查詢的方式進(jìn)行優(yōu)化
根據(jù)這個(gè)思路首先對(duì)id 進(jìn)行查詢:
select id from tb_sku order by id limit 1000000,10;

查詢結(jié)果就只需要0.34s 比之前的0.74s要快多了。究其原因,因?yàn)橹苯臃祷豬d的信息,并沒有進(jìn)行回表操作,所以速度別select * 要快
由于我們需要獲得select * 的信息,也就是tb_user 所有字段的信息,因此需要將上面的查詢結(jié)果和tb_user 進(jìn)行jion 操作。
select s.* from tb_sku s ,(select id from tb_sku order by id limit 1000000,10 ) t where s.id = t.id;

這里通過查詢id 和子查詢 的方式將查詢結(jié)果縮短為 0.38s,比之前直接通過 select * 的方式要縮短一倍的查詢時(shí)間。
到此這篇關(guān)于MySQL 原理與優(yōu)化之Limit 查詢優(yōu)化的文章就介紹到這了,更多相關(guān)MySQL Limit 優(yōu)化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql如何將查詢結(jié)果內(nèi)容進(jìn)行轉(zhuǎn)換
文章介紹了如何在MySQL中使用CASE表達(dá)式對(duì)查詢結(jié)果進(jìn)行多分支判斷,并分享了個(gè)人經(jīng)驗(yàn),希望對(duì)大家有所幫助2025-02-02
Mysql刪除重復(fù)數(shù)據(jù)通用SQL的兩種方法
本文主要介紹了Mysql刪除重復(fù)數(shù)據(jù)通用SQL的兩種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
MySQL8.0.28數(shù)據(jù)庫(kù)安裝和主從配置說明
這篇文章主要介紹了MySQL8.0.28數(shù)據(jù)庫(kù)安裝和主從配置說明,具有很好的參考價(jià)值,希望杜大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
深入理解MySQL主從復(fù)制線程狀態(tài)轉(zhuǎn)變
這篇文章主要給大家介紹了關(guān)于MySQL主從復(fù)制線程狀態(tài)轉(zhuǎn)變的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
Mysql數(shù)據(jù)庫(kù)介紹及mysql顯示命令
這篇文章主要介紹了Mysql數(shù)據(jù)庫(kù)介紹及mysql顯示命令 的相關(guān)資料,需要的朋友可以參考下2016-04-04

