MySQL索引優(yōu)化之分頁探索詳細(xì)介紹
??MySQL??索引優(yōu)化之分頁探索
表結(jié)構(gòu)
CREATE TABLE `demo` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '姓名', `age` int(11) NOT NULL DEFAULT '0' COMMENT '年齡', `position` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '職位', `card_num` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '工卡號(hào)', PRIMARY KEY (`id`), KEY `index_union` (`name`,`age`,`position`) ) ENGINE=InnoDB AUTO_INCREMENT=450003 DEFAULT CHARSET=utf8; 450003條數(shù)據(jù)
limit分頁執(zhí)行情況

像select * from demo limit 90000,10;考慮到回表,所以mysql干脆選擇全表掃描。
mysql不是直接從第90000行開始計(jì)算10條,而是從第一個(gè)葉子節(jié)點(diǎn)開始計(jì)數(shù),計(jì)算90010行。
案例一

針對(duì)上圖,當(dāng)id是連續(xù)自增的時(shí)候,可以用主鍵篩選出id=90000之后的數(shù)據(jù)。因?yàn)橹麈I的索引是B+樹結(jié)構(gòu),本身就是有序的。

案例二

先按照name排序,然后再從第90000行起找10行,雖然name是索引,但select的列在index_union索引樹上并沒有保存。
所以還會(huì)涉及到回表,于是mysql直接選擇掃主鍵索引樹的葉子結(jié)點(diǎn),先將40多萬數(shù)據(jù)根據(jù)name排好序,然后計(jì)算90000行+10行。
優(yōu)化方法:利用子查詢解決最消耗時(shí)間的排序和回表問題,聯(lián)合索引樹種保存有主鍵id,order by name的話可以將name、age、position整個(gè)索引充分使用因?yàn)榇_定了最左列的排序,其余的倆列age、和position其實(shí)也是
排好序的了,通過Extra字段也可以是使用了索引樹做排序。
最外層的查詢是根據(jù)主鍵來關(guān)聯(lián)的,所以幾乎可以忽略。10+10 因?yàn)閕d是主鍵,可以直接拿臨時(shí)表10條數(shù)據(jù)去掃。

到此這篇關(guān)于MySQL索引優(yōu)化之分頁探索詳細(xì)介紹的文章就介紹到這了,更多相關(guān)MySQL分頁探索內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Mysql的Sequence實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄贛ysql的Sequence實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
master and slave have equal MySQL server ids
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids2013-07-07
mysql8.0 用戶角色管理及授權(quán)的實(shí)現(xiàn)
MySQL是一種常見的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它提供了強(qiáng)大的安全機(jī)制來管理用戶權(quán)限,本文主要介紹了mysql8.0 用戶角色管理及授權(quán)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04
mysql時(shí)間戳轉(zhuǎn)成常用可讀時(shí)間格式的兩種方法
mysql時(shí)間戳轉(zhuǎn)成常用可讀時(shí)間格式的兩種方法,需要的朋友可以參考下。2010-09-09
mysql case when group by 實(shí)例詳解
這篇文章主要介紹了mysql 中類似php switch case 的語句,需要的朋友可以參考下2018-01-01
與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得(七)--查詢
在這個(gè)《與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得》系列里面,我一直都把MYSQL跟SQLSERVER進(jìn)行比較,相互進(jìn)行比較是學(xué)習(xí)一樣?xùn)|西比較好的方法2014-08-08
MySQL修改時(shí)間添加時(shí)間自動(dòng)更新的兩種方法
這篇文章主要介紹了MySQL修改時(shí)間添加時(shí)間自動(dòng)更新的兩種方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09

