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

是時(shí)候檢查一下使用索引的姿勢(shì)是否正確了!

運(yùn)維 數(shù)據(jù)庫(kù)運(yùn)維
索引,可以有效提高我們的數(shù)據(jù)庫(kù)搜索效率,各種數(shù)據(jù)庫(kù)優(yōu)化八股文里都有相關(guān)的知識(shí)點(diǎn)可背,不過(guò)單純的被條目其實(shí)很容易忘記。

索引,可以有效提高我們的數(shù)據(jù)庫(kù)搜索效率,各種數(shù)據(jù)庫(kù)優(yōu)化八股文里都有相關(guān)的知識(shí)點(diǎn)可背,不過(guò)單純的被條目其實(shí)很容易忘記。

所以松哥想通過(guò)幾篇文章,和大家仔細(xì)聊一聊索引的正確使用姿勢(shì),結(jié)合一些具體的例子來(lái)幫助大家理解索引優(yōu)化,這是一個(gè)小小的系列,可能會(huì)有幾篇文章,今天先來(lái)第一篇。

1. 索引列獨(dú)立

當(dāng)我們將帶有索引的列作為搜索的條件的時(shí)候,需要確保索引不在表達(dá)式中,索引中也不包含各種運(yùn)算。

我舉個(gè)簡(jiǎn)單例子,假設(shè)我有如下一張表:

一個(gè) user 表,里邊就四個(gè)字段,每個(gè)字段上都建了索引,現(xiàn)在有三條測(cè)試數(shù)據(jù):

我們來(lái)比較如下兩個(gè)查詢(xún):

可以看到:

  • 第一個(gè) type 為 ALL 表示全表掃描(沒(méi)用上索引);第二個(gè) type 為 ref 表示通過(guò)索引查找數(shù)據(jù),一般出現(xiàn)等值匹配的時(shí)候,type 會(huì)為 ref。
  • 第二個(gè)的 key 指明了 MySQL 使用哪個(gè)索引來(lái)優(yōu)化查詢(xún);rows 則顯示了 MySQL 為了找到所需的值而要讀取的行數(shù).
  • 第一個(gè)的 Extra 為 Using where 表示這個(gè)搜索需要在 server 層進(jìn)行判斷(過(guò)濾),即存儲(chǔ)引擎層無(wú)法返回滿(mǎn)足條件的數(shù)據(jù)(當(dāng)然這里也不需要回表,因?yàn)閴焊紱](méi)有用啥索引)。

從上面的分析中可以看到,雖然 age-1=98 與 age=99 雖然在邏輯上并無(wú)二致,但是 MySQL 卻無(wú)法自動(dòng)解析第一個(gè)表達(dá)式,進(jìn)而導(dǎo)致第一個(gè)無(wú)法使用索引。所以,我們不要在 where 條件中寫(xiě)表達(dá)式,不僅僅是上面這種表達(dá)式,一些使用了自帶函數(shù)的表達(dá)式也不能使用,我們要盡量簡(jiǎn)化 where 條件。

不過(guò)上面這個(gè)例子太牽強(qiáng)了,一般大家不會(huì)犯這種錯(cuò)誤,但是下面這個(gè)例子就不一定了,可能會(huì)有小伙伴在上面栽跟頭:查詢(xún)最近一年出生的用戶(hù)(birthday 列也是索引):

在這張圖里,我給出了兩種不同的查詢(xún)思路:

對(duì) birthday 做計(jì)算,如果 birthday 加上一年,得到的時(shí)間大于當(dāng)前時(shí)間,那么說(shuō)明該用戶(hù)出生日期在最近一年一年之內(nèi)。

對(duì)當(dāng)前日期進(jìn)行計(jì)算,如果當(dāng)前日期減去一年得到的時(shí)間小于 birthday,說(shuō)明 birthday 在一年之內(nèi)。

根據(jù)上圖 explain 的結(jié)果,很明顯第一種方案沒(méi)有用上索引,進(jìn)行了全表掃描;而第二種方案則用上了索引,只讀取了兩行數(shù)據(jù)就可以了。究其原因,就是因?yàn)榈谝环N方案在索引列上進(jìn)行了函數(shù)運(yùn)算,導(dǎo)致 MySQL 沒(méi)法使用索引了。

2. 巧用覆蓋索引

一般來(lái)說(shuō)我們不建議在查詢(xún)中直接使用 select *,使用 select * 有很多問(wèn)題,其中一個(gè)問(wèn)題就是無(wú)法利用索引覆蓋掃描(覆蓋索引)。

那這里需要大家首先明白什么是覆蓋索引。

在什么是 MySQL 的“回表”?一文中,松哥和大家聊了,索引按照物理存儲(chǔ)方式可以分為聚簇索引和非聚簇索引。

我們?nèi)粘Kf(shuō)的主鍵索引,其實(shí)就是聚簇索引(Clustered Index);主鍵索引之外,其他的都稱(chēng)之為非主鍵索引,非主鍵索引也被稱(chēng)為二級(jí)索引(Secondary Index),或者叫作輔助索引。

對(duì)于主鍵索引和非主鍵索引,使用的數(shù)據(jù)結(jié)構(gòu)都是 B+Tree,唯一的區(qū)別在于葉子結(jié)點(diǎn)中存儲(chǔ)的內(nèi)容不同:

主鍵索引的葉子結(jié)點(diǎn)存儲(chǔ)的是一行完整的數(shù)據(jù)。

非主鍵索引的葉子結(jié)點(diǎn)存儲(chǔ)的則是主鍵值以及索引列的值。

這是兩者最大的區(qū)別。

所以,搜索時(shí)如果使用了非主鍵索引,那么一共會(huì)搜索兩棵 B+Tree,第一次搜索 B+Tree 拿到主鍵值后再去搜索主鍵索引的 B+Tree,這個(gè)過(guò)程就是所謂的回表。但是,如果搜索的字段剛好就在二級(jí)索引的葉子結(jié)點(diǎn)上,那么是不是就不需要回表了?我們來(lái)驗(yàn)證下。

假設(shè)我有如下一張表:

  1. CREATE TABLE `user2` ( 
  2.   `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
  3.   `username` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL
  4.   `address` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL
  5.   `gender` varchar(4) COLLATE utf8mb4_unicode_ci DEFAULT NULL
  6.   PRIMARY KEY (`id`), 
  7.   KEY `username` (`username`,`address`) 
  8. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; 

id 是主鍵,username 和 address 是復(fù)合索引。

這表有三條記錄:

我們來(lái)做個(gè)簡(jiǎn)單測(cè)試,先來(lái)看如下 SQL:

  1. explain select username,address from user2 where username='javaboy'

這個(gè)查詢(xún) SQL,我們查詢(xún)的字段是 username 和 address,由于這兩個(gè)字段是復(fù)合索引,因此都保存在二級(jí)索引的 B+Tree 的葉子結(jié)點(diǎn)中,搜索到 username 后也就能拿到 address 的值了,因此不需要回表查詢(xún)。大家注意最后 Extra 中的 Using index 就是這意思。

Using index 表示使用索引覆蓋掃描來(lái)返回記錄,直接從索引中過(guò)濾不需要的記錄并返回命中結(jié)果,這是在 MySQL 服務(wù)器層完成的,但是無(wú)須再回表查詢(xún)記錄。

相同的道理,id 的值也存在于二級(jí)索引中,按理說(shuō)也不需要回表,所以我稍微修改一下查詢(xún) SQL,加入 id,大家來(lái)看下:

  1. explain select username,address,id from user2 where username='javaboy'

可以看到跟我們想的一樣。

那么我再加上 gender 呢?如果要查詢(xún)的字段中包含 gender,由于 gender 并沒(méi)有保存在二級(jí)索引的的葉子結(jié)點(diǎn)中,那么此時(shí)就需要回表查詢(xún)了:

  1. explain select gender from user2 where username='javaboy'

可以看到,此時(shí) Extra 為空,同時(shí)用到了二級(jí)索引 username,那么此時(shí)就需要回表了。

這個(gè)就是覆蓋索引,巧用覆蓋索引,能避免回表,提高查詢(xún)效率。那么此時(shí)就要盡量避免使用 select * 了(因?yàn)橐话銇?lái)說(shuō)不太可能給所有字段都建立一個(gè)復(fù)合索引)。

好啦,不知道小伙伴看明白沒(méi)有,下篇文章我們繼續(xù)~

本文轉(zhuǎn)載自微信公眾號(hào)「江南一點(diǎn)雨」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系江南一點(diǎn)雨公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 江南一點(diǎn)雨
相關(guān)推薦

2019-03-03 15:52:39

阿里云宕機(jī)云災(zāi)備

2023-06-01 08:19:19

ArrayListVector多線(xiàn)程

2020-08-27 15:35:01

存儲(chǔ)

2021-07-17 22:32:29

Windows 11Windows微軟

2019-01-15 13:14:03

機(jī)器人算法SAC

2017-02-23 15:37:44

OptionObject容器

2020-12-22 09:17:49

日志Loki服務(wù)

2021-08-30 07:01:19

HTTP網(wǎng)絡(luò)應(yīng)用

2017-07-10 13:09:45

前端Flexbox

2025-08-05 09:03:00

2019-11-28 10:40:45

Kafka架構(gòu)KafkaConsum

2021-09-15 16:20:02

Spring BootFilterJava

2020-08-31 06:54:37

注解脫敏ELK

2021-07-12 11:35:13

Go協(xié)程Goroutine

2021-08-22 15:07:29

大數(shù)據(jù)信息安全隱私

2016-01-05 11:28:20

按需付費(fèi)云計(jì)算docker

2022-02-21 11:21:40

golang編程語(yǔ)言

2020-08-05 07:27:54

SQL優(yōu)化分類(lèi)

2018-01-11 15:31:39

命令Linux關(guān)機(jī)
點(diǎn)贊
收藏

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

韩日视频在线观看| 在线免费观看视频一区| 久久精品久久久久电影| 欧美精品少妇| 成人天堂资源www在线| 成人国产在线视频| 神马午夜在线视频| 欧美性猛交xxxx免费看| 欧美 日本 亚洲| 久久精品国产亚洲一区二区三区| 国产美女99p| 日本久久黄色| 91日韩在线视频| 美女毛片一区二区三区四区最新中文字幕亚洲| 精品福利一区二区三区免费视频| 国产日韩精品在线看| 亚洲妇女屁股眼交7| 一级在线免费视频| 91蜜桃免费观看视频| 白白操在线视频| 成人久久18免费网站麻豆| 日韩一区二区中文| 国产精品色视频| 国产成人一区| 日本91av在线播放| 亚洲系列另类av| 国产日韩中文在线| 激情视频一区| 色阁综合av| 不卡一区二区在线| 动漫av免费观看| 亚洲成人av一区| 亚洲卡一卡二| 永久免费精品影视网站| 性欧美video另类hd尤物| 国外成人在线视频| 99久久99久久精品国产片果冰| 亚洲综合日韩中文字幕v在线| 国产农村妇女精品一二区| 亚洲精品乱码久久久久久蜜桃91| 粉嫩欧美一区二区三区高清影视| 91欧美视频在线| 欧美调教femdomvk| 亚洲天堂一区二区| 国产精品v片在线观看不卡| 亚洲视频二区| 成人免费黄色网址| 777午夜精品视频在线播放| 大胆人体一区| 国产美女久久精品香蕉69| 99国产精品久久久久久久| 欧美啪啪免费视频| 色综合欧美在线视频区| 亚洲十八**毛片| 亚洲影院高清在线| 国产精品电影院| 亚洲播播91| 91超碰在线电影| 亚洲女同ⅹxx女同tv| 黄色免费网站在线| 成人亚洲欧美一区二区三区| 国产一区二区在线看| 在线观影网站| 欧美极品欧美精品欧美视频| 久久看片网站| 成人在线视频成人| 91精品国产乱码久久久久久蜜臀| 韩国成人在线视频| 日本中文字幕在线视频| 国产精品久久久久久久7电影| 久久亚洲私人国产精品va媚药| 日本性爱视频在线观看| 91麻豆精品秘密入口| 一区二区三区中文免费| 亚洲精品3区| 九九99九九精彩| 91国产精品视频在线| 国产欧美日韩在线视频| 四虎影视国产精品| 久草福利视频在线| 操人视频在线观看欧美| 久久精品国产久精国产| 国产日产一区二区三区| 久久国产手机看片| 日韩精品中文字幕久久臀| 蜜桃视频在线观看一区| 99热99re6国产在线播放| 性欧美.com| 在线视频国产日韩| 中文字幕在线观看一区二区| 精品国产导航| 欧美日韩在线中文字幕| 神马影院我不卡午夜| 日韩在线欧美在线| 亚洲精品国产成人久久av盗摄| 狠色狠色综合久久| 伊人久久在线| 黑巨人与欧美精品一区| 91久久精品国产91久久性色tv| 亚洲国产高清高潮精品美女| 成人午夜电影网站| 91欧美国产| 日本欧美韩国| 91视频在线观看| 精品无码一区二区三区爱欲| 国产91对白在线播放| 91精品国产综合久久久久久久| 久久久久久电影| 日日嗨av一区二区三区四区| 国产精品极品在线观看| 欧美hdxxx| 亚色视频在线播放| 日韩小视频网站| 国产一区二区三区免费不卡| 尤物九九久久国产精品的分类| 亚洲一区二区欧美激情| 国产乱码精品1区2区3区| 精品国产日韩欧美| 在线成人视屏| 国产亚洲精品美女久久久久| 久久久午夜精品理论片中文字幕| 欧美天天在线| 欧美影院天天5g天天爽| 老司机深夜福利在线观看| 精品亚洲成a人片在线观看| 三上悠亚在线资源| 一区二区免费在线视频| 国产精品免费一区二区三区四区| 欧美极品第一页| 欧美黑人视频一区| 亚洲人精品午夜在线观看| 国产欧美日韩一区二区三区在线| 亚洲资源网站| 狠狠一区二区三区| 亚洲一区二区电影| 成人av在线播放| 美女网站视频一区| 亚洲免费福利| 超级碰碰久久| 日本一区二区中文字幕| 91黄页在线观看| 88xx成人永久免费观看| av成人在线观看| 欧美黄页免费| 亚洲精品视频一二三区| 欧美自拍一区| 精品72久久久久中文字幕| 国产成人1区| 伊人影院久久| 美国十次了思思久久精品导航| 精品一区二区三区在线播放| 日韩二区在线观看| 一本色道久久精品| 粉嫩aⅴ一区二区三区四区| 久久美女艺术照精彩视频福利播放 | 亚洲性无码av在线| 久久天天躁夜夜躁狠狠躁2022| 一区二区国产精品视频| 久久乐国产精品| 亚洲精品欧美日韩| 一区二区三区三区在线| 日本三级黄色网址| 国产黄色在线播放| 高清成人在线| 欧美疯狂party性派对| 亚欧日韩另类中文欧美| 久久久成人av毛片免费观看| 欧美黄色成人| 亚洲91中文字幕无线码三区| 国产成人亚洲综合a∨猫咪| 亚洲欧美一区二区三区国产精品 | 免费福利在线观看| 成人开心激情| 在线观看视频日韩| 久久久精品蜜桃| 日韩免费福利电影在线观看| 欧美福利视频在线| 中文字幕人成一区| 国产午夜在线观看| 丝袜美腿一区二区三区动态图| 精品夜夜嗨av一区二区三区| 亚洲欧洲国产日本综合| 欧美日韩成人在线| 欧美亚洲另类视频| 免费毛片一区二区三区久久久| 国产小黄视频| 日本.亚洲电影| 蜜桃视频一区| 91精品欧美福利在线观看| 精品国产欧美一区二区三区成人| 性欧美精品一区二区三区在线播放 | 日韩在线视频线视频免费网站| 欧美精品123| 午夜老司机在线观看| 精品一级毛片| 午夜电影网一区| 亚洲自拍偷拍在线| 18加网站在线| 天堂久久久久va久久久久| 亚洲色图视频网站|