国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

聊聊索引失效的經(jīng)典場景

數(shù)據(jù)庫 MySQL
因?yàn)樵谟卸鄠€索引的情況下,MySQL優(yōu)化器一般會通過比較掃描行數(shù)、是否需要臨時表以及是否需要排序等,來作為選擇索引的判斷依據(jù)。

前置條件

數(shù)據(jù)庫版本為5.7.17。

創(chuàng)建一張user表,預(yù)置500w條數(shù)據(jù),每個字段的值都是前綴加上從0開始計數(shù)的數(shù)字,累加到5000000,如圖:

然后用explain來解析一下有沒有走索引。

最左匹配原則

我們首先建一個組合索引,username,jobno,company三個字段:

首先執(zhí)行以下幾個sql:

EXPLAIN SELECT * FROM `user` WHERE username = 'cxj1000000' AND jobno = 'jn1000000' AND company = 'com1000000';
EXPLAIN SELECT * FROM `user` WHERE username = 'cxj1000000';
EXPLAIN SELECT * FROM `user` WHERE username = 'cxj1000000' AND jobno = 'jn1000000';
EXPLAIN SELECT * FROM `user` WHERE jobno = 'jn1000000' AND username = 'cxj1000000';
EXPLAIN SELECT * FROM `user` WHERE username = 'cxj1000000' AND company = 'com1000000';

發(fā)現(xiàn)都走了索引。

接下來再執(zhí)行幾個sql:

EXPLAIN SELECT * FROM `user` WHERE jobno = 'jn1000000' AND company = 'com1000000';
EXPLAIN SELECT * FROM `user` WHERE company = 'com1000000';
EXPLAIN SELECT * FROM `user` WHERE jobno = 'jn1000000' ;

發(fā)現(xiàn)沒有走索引。

結(jié)論:最左匹配原則要求查詢的sql語句中,必須包含最左邊的字段,在username,jobno,company的組合索引中,username是最左邊的字段,那么查詢的sql語句中的where條件中,必須包含username字段,而與sql語句中username的使用順序無關(guān)。

索引列上有計算

根據(jù)主鍵ID查詢,毫無疑問會走主鍵索引,但如果像下面這種:

EXPLAIN SELECT * FROM `user` WHERE id + 1 = 2

可以看到?jīng)]有走索引。

總結(jié):如果索引列參與了計算,不會命中索引。像這種情況可以變換一下等式,把運(yùn)算放到等號右邊,就會命中索引。

EXPLAIN SELECT * FROM `user` WHERE id = 2 - 1

查詢條件帶or

上面所說的最左匹配原則中,只要查詢語句中包含username就會走索引,但如果我們把a(bǔ)nd條件換成or,即:

SELECT * FROM `user` WHERE username = 'cxj13' OR jobno = 'jn13'

可以看到并沒有走索引,而是全表掃描,所以在帶有or的查詢語句中,索引將失效,除非所有條件都帶有索引。也就是說,username有索引,jobno也必須要建一個索引才會生效。

like查詢

在username字段上新建索引user_idx_normal_username,不使用%模糊查詢:

SELECT * FROM `user` WHERE username LIKE 'cxj'

使用前置%:

使用后置%:

前后都用%:

結(jié)論:模糊查詢中,只要使用了%都不會走索引,不使用%號時可以走索引。

字段類型不同

還是使用username進(jìn)行查詢,username的字段類型是字符串類型,我們知道以下語句:

SELECT * FROM `user` WHERE username = 'cxj13'

肯定是會走索引的,但如果我們不用引號引用起來,而是:

SELECT * FROM `user` WHERE username = 100

會發(fā)現(xiàn)沒有走索引:

結(jié)論:字符串的索引字段在查詢時數(shù)據(jù)需要用引號引用,否則索引失效。

查詢語句包含in

這種就比較特殊了,走不走索引不是絕對的,跟所查詢的數(shù)據(jù)量跟總表數(shù)據(jù)量的比例有關(guān)。

我們新建一張表:

CREATE TABLE `test` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`dept` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8

然后往這張表里插入10條數(shù)據(jù):

首先執(zhí)行以下語句:

SELECT * FROM test WHERE id IN (1)

執(zhí)行結(jié)果:

可以看到走了索引,需要注意的是type,我們知道type表示所走索引的一個效率值,它的結(jié)果的好壞依次為:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL。

一般來說,至少要達(dá)到range級別,當(dāng)type=index或者ALL時,表示效率低下,需要優(yōu)化。我們看到只查詢一條記錄時,不但走了索引,而且type=const,效率較高。我們擴(kuò)大下范圍:

SELECT * FROM test WHERE id IN (1,2,3)

從執(zhí)行結(jié)果上看,也走了索引,但此時type=range,效率降低了。再擴(kuò)大下范圍:

SELECT * FROM test WHERE id IN (1,2,3,4,5)

可以看到?jīng)]有走索引了,type=ALL,全表掃描。

結(jié)論:mysql優(yōu)化器會根據(jù)所查詢的數(shù)據(jù)量決定是走索引還是全表掃描。

mysql選錯索引

我們再建一個demo表來說明這種情況:

CREATE TABLE `demo` (
`id` int(11) NOT NULL,
`a` int(11) NOT NULL default 0,
`b` int(11) NOT NULL default 0,
PRIMARY KEY (`id`),
KEY `a` (`a`),
KEY `b` (`b`)
) ENGINE=InnoDB;

然后插入100w條數(shù)據(jù),執(zhí)行以下sql:

select * from demo where (a between 1000 and 2000) and (b between 50000 and 100000) limit 1

看一下執(zhí)行情況:

可以看到走了索引a,且只掃描了1001行,其實(shí)這正是我們需要的。

但如果我們加個排序,變成這樣:

SELECT * FROM demo WHERE (a BETWEEN 1000 AND 2000) AND (b BETWEEN 50000 AND 100000) ORDER BY b LIMIT 1

再看下執(zhí)行情況:

可以看到走了索引b,并且掃描了5w多行數(shù)據(jù),這樣效率顯然會降低,為什么會走索引b呢?

因?yàn)樵谟卸鄠€索引的情況下,mysql優(yōu)化器一般會通過比較掃描行數(shù)、是否需要臨時表以及是否需要排序等,來作為選擇索引的判斷依據(jù)。在這個例子中,優(yōu)化器看到根據(jù)b來進(jìn)行排序,認(rèn)為使用b效率更高,所以走了索引b。實(shí)際上,我們應(yīng)該使用a索引。

這種情況可以使用force index來強(qiáng)制使用索引a。

SELECT * FROM demo FORCE INDEX(a) WHERE (a BETWEEN 1000 AND 2000) AND (b BETWEEN 50000 AND 100000) ORDER BY b LIMIT 1;

可以看到,查詢走了索引a,并且只掃描了1001行。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2022-01-09 18:32:03

MySQL SQL 語句數(shù)據(jù)庫

2024-05-08 08:18:05

索引失效場景

2021-09-04 07:56:44

Spring事務(wù)失效

2024-04-19 13:57:30

索引數(shù)據(jù)庫查詢

2024-01-05 14:20:55

MySQL索引優(yōu)化器

2020-12-09 10:10:24

MySQL數(shù)據(jù)庫算法

2022-02-28 08:55:31

數(shù)據(jù)庫MySQL索引

2024-05-07 08:23:03

Spring@Async配置

2022-02-14 16:53:57

Spring項(xiàng)目數(shù)據(jù)庫

2024-12-11 08:09:54

2022-08-29 09:06:43

hippo4j動態(tài)線程池

2019-07-21 09:17:11

數(shù)據(jù)緩存架構(gòu)

2022-05-02 21:47:13

并發(fā)編程線程

2025-05-28 00:00:01

MySQL場景索引

2020-05-21 11:29:58

復(fù)刻手機(jī)屏幕

2025-11-27 09:17:49

2023-09-28 09:07:54

注解失效場景

2020-12-08 09:45:07

MySQL數(shù)據(jù)庫索引

2024-10-15 08:37:08

2025-10-29 02:11:00

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

欧美日韩视频在线观看一区二区三区| 性欧美亚洲xxxx乳在线观看| 免费人成在线观看视频播放| 亚洲精品乱码| 91av视频在线播放| 999精品视频在线观看| 欧美乱妇一区二区三区不卡视频| 一个人看的免费视频色| 自拍偷拍欧美精品| 在线成人私人影院| 国产夜色精品一区二区av| 四虎4hu永久免费入口| 久久99久国产精品黄毛片色诱| 91精品久久久久久蜜桃| 郴州新闻综合频道在线直播| 欧美有码在线观看视频| 国内精品国产成人国产三级粉色| 久久精品久久久久| 精品一区视频| 久久久天堂国产精品女人| 精品国产不卡一区二区| 欧美成人网在线| 亚洲精品在线a| 久久久久久久国产精品视频| 4438全国亚洲精品观看视频| 欧美裸体xxxx极品少妇| 丁香五月缴情综合网| 欧美在线激情视频| 色一区二区三区四区| 成人免费福利在线| 狠狠干综合网| 日韩欧美国产二区| 国产精品66部| 一道本视频在线观看| 中文字幕日本乱码精品影院| 美女激情网站| 在线精品视频免费播放| 性网站在线观看| 亚洲小视频在线观看| 精品999日本久久久影院| 久久久久久久久久av| 国内精品久久久久久99蜜桃| 91在线观看免费观看| 免费亚洲婷婷| 男人日女人视频网站| 国产精品久久一卡二卡| 好男人社区在线视频| 欧美午夜激情在线| 最新国产在线拍揄自揄视频| 亚洲欧美一区二区三区久久| 成人在线视频国产| 国产精品91免费在线| 伊人久久久大香线蕉综合直播| 欧美在线3区| 久久国产精品72免费观看| 可以在线看的av网站| 亚洲一区二区综合| 日本美女在线中文版| 色偷偷噜噜噜亚洲男人的天堂| 性人久久久久| 欧美一区二区三区电影在线观看| www.色精品| 日本在线视频1区| 亚洲精品美女久久久| 美女一区2区| 免费影院在线观看一区| 久久久天堂av| av大片在线观看| 欧美成人免费观看| 欧美天堂亚洲电影院在线观看| 欧美狂野激情性xxxx在线观| 精品福利视频导航| 久久99久久99精品免观看软件| 国产精品视频一| 成人夜色视频网站在线观看| 四虎在线观看| 久久精品国产欧美亚洲人人爽| 91精品推荐| 国产最新免费视频| 欧美精品久久99久久在免费线| 欧美高清一级片| 蜜桃导航-精品导航| 亚洲乱码一区二区三区在线观看| 两个人看的在线视频www| 国产精品尤物福利片在线观看| 福利91精品一区二区三区| 欧美日韩在线精品一区二区三区激情综 | 亚洲欧美另类人妖| 日韩成人免费| 久草热视频在线观看| 欧美主播一区二区三区| 成人线上播放| 免费日韩在线观看| 欧美色涩在线第一页| 蜜乳av综合| 亚洲色成人一区二区三区小说| 日韩精品中文字幕在线不卡尤物| 波多野结衣在线观看一区二区三区| 999在线观看视频| 亚洲精品在线观看视频| 亚洲高清影视| 国产一级黄色片免费| 日韩在线观看免费网站| 久热国产精品| 啊v视频在线| 成人激情视频在线观看| 国产免费成人在线视频| 国产美女高潮在线观看| 精品久久蜜桃| 日本道精品一区二区三区| 欧美日韩一区二区综合| 四虎永久在线精品无码视频| 日韩精品在线视频| 欧美亚洲网站| 成年人视频在线看| 91久久精品国产| 亚洲综合免费观看高清完整版在线| 91国产精品| 国产极品粉嫩福利姬萌白酱| 欧美变态tickling挠脚心| 伊人久久综合| 久久精品色图| 91网站在线免费观看| 亚洲va欧美va天堂v国产综合| 神马久久影院| 97影院理论| 日韩美女视频在线观看| 国产欧美va欧美不卡在线| 玖玖精品在线| 97干在线视频| 精品国产一区二区三区久久久| 成人精品gif动图一区| 成人日韩精品| 玩弄中年熟妇正在播放| 中文字幕亚洲自拍| 久久综合久色欧美综合狠狠| 婷婷成人av| 韩国中文字幕av| 17婷婷久久www| 亚洲成在人线在线播放| 在线国产一区二区| 国产成人天天5g影院在线观看| 国产综合动作在线观看| 91麻豆精品国产91久久久使用方法 | 日韩video| 亚洲视频在线观看| 岛国一区二区在线观看| 国产精品3区| 免费激情视频在线观看| 日韩美女视频免费在线观看| 午夜电影一区二区| 欧美特黄一级| 日本大片在线播放| 做爰高潮hd色即是空| 色吧影院999| 日韩美女精品在线| 日本精品黄色| av影片在线看| 一区二区三区四区五区精品| 正在播放亚洲1区| 国产精品美女久久久久久久| 欧美丰满日韩| 在线网址91| 国产91在线视频观看| 国产精品aaaa| 欧美一级欧美三级在线观看| 丁香桃色午夜亚洲一区二区三区 | 国产一区二区三区高清在线观看| 国产成人精品免费在线| 久草精品视频| 成人在线免费观看| 天堂а√在线中文在线| 久久91精品国产91久久久| 亚洲国产精品视频| 亚洲综合另类| 日韩黄色三级| 成人福利影院| 翡翠波斯猫1977年美国| 亚洲第一精品夜夜躁人人躁| 国产视频一区二区在线| 综合久久综合| 亚洲高清黄色| 青柠在线影院观看日本| 性欧美大战久久久久久久免费观看| 中文字幕亚洲精品| 精品国产91久久久久久| 激情伊人五月天久久综合| 日韩av网址大全| 日本高清成人vr专区| 自拍偷拍精选| 青青影院一区二区三区四区| 久久97久久97精品免视看| 在线视频一区二区免费| 成人一区二区三区视频| 精品国产一区二区三区久久久蜜臀| caoprom在线| 亚洲色图图片网| 欧美精品一区免费| 久久久婷婷一区二区三区不卡| 性色av一区二区咪爱|