Mysql百萬(wàn)級(jí)分頁(yè)優(yōu)化技巧
普通分頁(yè)
數(shù)據(jù)分頁(yè)在網(wǎng)頁(yè)中十分多見(jiàn),分頁(yè)一般都是limit start,offset,然后根據(jù)頁(yè)碼page計(jì)算start
select * from user limit 1,20
這種分頁(yè)在幾十萬(wàn)的時(shí)候分頁(yè)效率就會(huì)比較低了,MySQL需要從頭開始一直往后計(jì)算,這樣大大影響效率
SELECT * from user limit 100001,20; //time 0.151s explain SELECT * from user limit 100001,20;
我們可以用explain分析下語(yǔ)句,沒(méi)有用到任何索引,MySQL執(zhí)行的行數(shù)是16W+,于是我們可以想用到索引去實(shí)現(xiàn)分頁(yè)
優(yōu)化分頁(yè)
使用主鍵索引來(lái)優(yōu)化數(shù)據(jù)分頁(yè)
select * from user where id>(select id from user where id>=100000 limit 1) limit 20; //time 0.003s
使用explain分析語(yǔ)句,MySQL這次掃描的行數(shù)是8W+,時(shí)間也大大縮短。
explain select * from user where id>(select id from user where id>=100000 limit 1) limit 20;
總結(jié)
在數(shù)據(jù)量比較大的時(shí)候,我們盡量去利用索引來(lái)優(yōu)化語(yǔ)句。上面的優(yōu)化方法如果id不是主鍵索引,查詢效率比第一種還要低點(diǎn)。我們可以先使用explain來(lái)分析語(yǔ)句,查看語(yǔ)句的執(zhí)行順序和執(zhí)行性能。
補(bǔ)充:mysql中百萬(wàn)級(jí)別分頁(yè)查詢性能優(yōu)化
前提條件:
1.表的唯一索引
2.百萬(wàn)級(jí)數(shù)據(jù)
SQL語(yǔ)句:
select c.* FROM ( SELECT a.logid FROM tableA a where 1 = 1 <#if phone?exists&& phone!=""> AND a.phone like "%":phone"%" </#if> ORDER BY a.create_time DESC limit :startIndex,:maxCount ) b,tableA c where 1 = 1 AND b.logid = c.logid
其中:
1:startIndex:表示查找數(shù)據(jù)的開始位置
2:maxCount:表示每頁(yè)顯示數(shù)據(jù)個(gè)數(shù)
3:a.create_time DESC:降序排列,需要在create_time建立索引
4:limiit放在里面,而不要放在查詢的外面,這樣效率提升很多
5:logid:唯一索引
相關(guān)文章
MySQL 8.0.20 安裝教程圖文詳解(windows 64位)
這篇文章主要介紹了MySQL 8.0.20安裝教程(windows 64位),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有,需要的朋友可以參考下2020-05-05使用cgroups來(lái)限制MySQL企業(yè)備份服務(wù)對(duì)資源的占用
這篇文章主要介紹了使用cgroups來(lái)限制MySQL企業(yè)備份服務(wù)對(duì)資源的占用,以限制mysqlbackup相關(guān)的進(jìn)程和線程對(duì)CPU和內(nèi)存的閑時(shí)消耗,需要的朋友可以參考下2015-06-06mysql 的root 用戶無(wú)法授權(quán)及解決navicat 遠(yuǎn)程授權(quán)提示1044問(wèn)題
這篇文章主要介紹了mysql 的root 用戶無(wú)法授權(quán),解決navicat 遠(yuǎn)程授權(quán)提示1044問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得(四)--BLOB數(shù)據(jù)類型
在MYSQL中BLOB是一個(gè)二進(jìn)制大對(duì)象,用來(lái)儲(chǔ)存可變數(shù)量的數(shù)據(jù),而MSSQL中并沒(méi)有BLOB數(shù)據(jù)類型,只有大型對(duì)象數(shù)據(jù)類型(LOB)2014-06-06Mysql優(yōu)化調(diào)優(yōu)中兩個(gè)重要參數(shù)table_cache和key_buffer
這篇文章主要介紹了Mysql優(yōu)化調(diào)優(yōu)中兩個(gè)重要參數(shù)table_cache和key_buffer,需要的朋友可以參考下2014-12-12MySQL數(shù)據(jù)庫(kù)中刪除重復(fù)記錄簡(jiǎn)單步驟
這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)中刪除重復(fù)記錄的相關(guān)資料,在使用數(shù)據(jù)庫(kù)時(shí),出現(xiàn)重復(fù)數(shù)據(jù)是常有的情況,但有些情況是允許數(shù)據(jù)重復(fù)的,而有些情況是不允許的,當(dāng)出現(xiàn)不允許的情況,我們就需要對(duì)重復(fù)數(shù)據(jù)進(jìn)行刪除處理,需要的朋友可以參考下2023-08-08