MySQL?原理與優(yōu)化之Limit?查詢優(yōu)化
假設(shè)有表tb_sku,其表結(jié)構(gòu)如下:
表中大約有200w條記錄,執(zhí)行如下的sql 語句大約 4.36s 返回?cái)?shù)據(jù)
select count(*) from tb_sku;
接著我們使用 對(duì)其進(jìn)行分頁查找:
select * from tb_sku limit 0,10;
limit 語句 其中0 代表起始位置,10 為每頁返回的數(shù)據(jù)數(shù)量。
如上圖所示,很快就返回了查詢結(jié)果。
接著我們?cè)偈褂肧QL 語句
select * from tb_sku limit 10,10;
語句從記錄位置10的位置開始再往下返回10 條記錄,也就是第二頁的信息。其返回時(shí)間也是比較快。
然后,我們加大起始位置 到100w如下:
select * from tb_sku limit 1000000,10;
此時(shí)返回時(shí)間需要0.74 s,這說明了使用limit 對(duì)大數(shù)據(jù)量的表進(jìn)行分頁,位置越靠后效率越低。拿上面的例子來說,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)文章
麒麟系統(tǒng)上安裝?MySQL?8.0.24的詳細(xì)步驟(避坑指南)
這篇文章主要介紹了麒麟系統(tǒng)上安裝MySQL8.0.24的詳細(xì)步驟,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08mysql數(shù)據(jù)庫查詢基礎(chǔ)命令詳解
這篇文章主要介紹了mysql數(shù)據(jù)庫查詢基礎(chǔ)命令,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11MySQL之臨時(shí)表的實(shí)現(xiàn)示例
MySQL臨時(shí)表是存儲(chǔ)在內(nèi)存或者磁盤上的臨時(shí)數(shù)據(jù)表,它們的生命周期只限于當(dāng)前數(shù)據(jù)庫會(huì)話,臨時(shí)表的創(chuàng)建和使用方式與普通表類似,本文就詳細(xì)的介紹了MySQL之臨時(shí)表,感興趣的可以了解一下2023-08-08實(shí)現(xiàn)MySQL數(shù)據(jù)庫鎖的兩種方式
今天我們就來聊一聊數(shù)據(jù)庫的鎖,實(shí)現(xiàn)數(shù)據(jù)庫鎖的兩種方式,一個(gè)是實(shí)現(xiàn)樂觀鎖的方式,一個(gè)是實(shí)現(xiàn)悲觀鎖的實(shí)現(xiàn)方式,文中的代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06常見的數(shù)據(jù)庫1045密碼錯(cuò)誤問題解決方法
連接MySQL數(shù)據(jù)庫時(shí)難免會(huì)遇到1045錯(cuò)誤,主要是因?yàn)橛脩糨斎氲挠脩裘蛎艽a錯(cuò)誤被拒絕訪問,下面這篇文章主要給大家介紹了關(guān)于常見的數(shù)據(jù)庫1045密碼錯(cuò)誤問題的解決方法,需要的朋友可以參考下2023-04-04深入sql數(shù)據(jù)連接時(shí)的一些問題分析
本篇文章是對(duì)關(guān)于sql數(shù)據(jù)連接時(shí)的一些問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06