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

為什么SQL查詢以%開頭索引就失效了呢?

數據庫 其他數據庫
覆蓋索引(Covering Index)是一種特殊的索引結構,其設計初衷是為了提高查詢性能。與傳統的索引不同,覆蓋索引包含了查詢所需的所有列,因此,當執行查詢時,數據庫引擎可以直接從索引中獲取所需的數據,而無需回表去訪問實際的表數據。

今天我們來聊一下索引失效的問題,因為在開發的過程中,不光需要我們去寫業務代碼,有時候還可能會接手一些別人的代碼,而別人寫的一些 SQL ,可能有幾百行,甚至有時候遇到一些時間較久的系統,一個完整的 SQL 甚至可能比一個方法都長,這時候,就會出現一種情況,需要你去優化,而優化的時候,我們就會首先從索引層面下手,這時候,我們就遇到了問題了,比如我們做模糊查詢的時候,很多人的習慣是 LIKE '%xxxx%',殊不知,這種雖然能滿足條件,但是缺忽略了索引,導致索引不生效,今天我們就來說說這個。

建表驗證

如果有些朋友不信的話,那么我們來驗證一下,首先我們建一張表,然后寫入數據,腳本如下:

CREATE TABLE `user`  (
  `ID` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `USER_NAME` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `AGE` int(11) NULL DEFAULT NULL,
  `ADDRESS` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `IP` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `PHONE` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `EMAIL` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`ID`) USING BTREE,
  INDEX `NAME_PHONE`(`USER_NAME`, `PHONE`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

圖片圖片

同時我們給 USER_NAME 和 PHONE 建立了聯合索引,我們插入數據。

INSERT INTO `baseboot`.`user`(`ID`, `USER_NAME`, `AGE`, `ADDRESS`, `IP`, `PHONE`, `EMAIL`) VALUES ('28715757596573696', '測試人員', 12, '北京市海淀區', '127.0.0.1', '17788779981', '789911@163.com');
INSERT INTO `baseboot`.`user`(`ID`, `USER_NAME`, `AGE`, `ADDRESS`, `IP`, `PHONE`, `EMAIL`) VALUES ('28715757596573697', '開發人員', 22, '北京市海淀區', '127.0.0.1', '17788779981', '789911@163.com');

我們插入兩條數據,接下來我們看看效果。

圖片圖片

然后我們通過 LIKE 來進行查詢。

使用 LIKE '%xxx%'。

圖片圖片

使用 LIKE 'xxx%'。

圖片圖片

我們使用的是 EXPLAN 來分析我們的 SQL ,對比明顯,一個使用了我們創建的索引,另外一個沒有使用我們創建的索引,所以,為什么失效了呢?

為什么 LIKE '%xxxx%' 索引失效了?

當我們遇到這個問題的時候,這個題目也是面試官比較喜歡問到的問題,百分號在左和在右的區別是哪里呢?

我們都知道在SQL查詢中,LIKE操作符用于模糊匹配字符串。通配符%在LIKE語句中的位置對查詢的性能和結果有著顯著的影響。當%位于LIKE語句的左邊、右邊或兩邊時,它們的行為和效果是不同的。

% 在左邊:

  • 當%位于LIKE語句的左邊時,如LIKE '%keyword',這種查詢模式通常會導致索引失效。因為數據庫系統需要掃描整個表或索引來查找包含指定關鍵詞的記錄,而不是利用索引的有序性來快速定位。這會導致查詢性能下降,尤其是在大型表中。
  • 索引失效的原因是數據庫無法高效匹配這種模式。數據庫難以直接根據索引列的值來定位數據,而需要進行全表掃描或索引的全掃描。

% 在右邊:

  • 當%位于LIKE語句的右邊時,如LIKE 'keyword%',這種查詢模式通??梢岳盟饕?,如果索引是按照從左到右的順序構建的(如常見的B+樹索引)。數據庫系統可以從索引的起始位置開始,沿著索引的順序查找以指定關鍵詞開頭的記錄。
  • 雖然索引可以幫助加速查詢,但是如果查詢中還有其他條件或限制,或者如果索引的選擇性較低(即索引中的值大多相同或重復),那么查詢性能可能仍然不如預期。

% 在兩邊:

  • 當%同時位于LIKE語句的左邊和右邊時,如LIKE '%keyword%',這種查詢模式通常也會導致索引失效。因為數據庫系統需要在整個表或索引中查找包含指定關鍵詞的記錄,而無法利用索引的有序性進行快速定位。
  • 與%在左邊的情況類似,這種查詢模式需要進行全表掃描或索引的全掃描,從而導致查詢性能下降。

使 LIKE '%xxx%' 索引生效的操作是什么樣子呢?

那么我們如何讓在左邊的百分號能命中索引,讓索引不失效呢?

我們可以這樣操作:

圖片圖片

也就是說,我們需要把有索引的字段,放在最開始的位置,并且盡量的精確索引的字段,而沒有其他的字段,這種情況也是可以命中索引的。

而這種情況下,其實就可以理解為是覆蓋索引,就是下圖的樣子。

圖片圖片

那么,什么是覆蓋索引呢?

什么是覆蓋索引

覆蓋索引(Covering Index)是一種特殊的索引結構,其設計初衷是為了提高查詢性能。與傳統的索引不同,覆蓋索引包含了查詢所需的所有列,因此,當執行查詢時,數據庫引擎可以直接從索引中獲取所需的數據,而無需回表去訪問實際的表數據。

在傳統的索引結構中,索引通常只包含被索引列的值和指向表中對應行的指針。當查詢需要從表中獲取數據時,數據庫引擎首先通過索引找到對應的指針,然后再根據這些指針去表中獲取實際的數據。這個過程被稱為“回表操作”,它增加了查詢的IO操作和數據傳輸的開銷,影響了查詢性能。

而覆蓋索引則避免了回表操作。因為覆蓋索引本身已經包含了查詢所需的所有列的值,所以數據庫引擎在查詢時可以直接從索引中獲取數據,無需再去訪問表。這樣就減少了IO操作和數據傳輸,大大提高了查詢效率。

要創建一個覆蓋索引,需要確保索引包含了查詢中WHERE子句和SELECT子句引用的所有列。這樣,當執行查詢時,數據庫引擎就可以僅通過掃描索引來滿足查詢的需求,無需訪問表。

值得注意的是,雖然覆蓋索引可以提高查詢性能,但它也會增加數據庫的存儲空間和索引維護的開銷。因此,在設計和使用覆蓋索引時,需要權衡其帶來的性能提升和額外的存儲與維護成本。

總的來說,覆蓋索引是一種有效的優化手段,可以在某些情況下顯著提高SQL查詢的性能。然而,它的使用需要根據具體的查詢和數據庫環境進行仔細的考慮和測試。

總的來說,%在LIKE語句中的位置對查詢性能有著重要影響。為了提高查詢性能,盡量避免在LIKE語句的開始處使用%通配符,而是盡量將通配符放在查詢模式的末尾或中間位置。同時,合理設計和使用索引也是提高查詢性能的關鍵。

所以,你知道為什么失效了么?

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2020-12-11 08:02:16

索引MySQL存儲

2011-01-18 15:27:30

Postfix

2020-10-29 09:19:11

索引查詢存儲

2020-09-16 06:51:37

Java線程JVM

2020-03-05 16:55:56

索引數據庫SQL

2020-11-27 06:58:24

索引

2022-06-28 15:46:18

SQL語句索引

2022-04-13 20:53:15

Spring事務管理

2020-08-10 11:20:59

索引MySQL數據庫

2016-07-01 14:37:01

SparkSQL

2021-12-14 07:05:00

SQL語句數據庫

2018-04-02 10:58:28

大數據sqoop大數據項目

2018-04-11 09:50:04

大數據

2018-06-26 15:58:06

數據庫MySQL索引優化

2020-01-22 16:36:52

MYSQL開源數據庫

2013-01-16 14:29:22

2013-01-15 10:53:36

2022-10-17 00:04:30

索引SQL訂單

2022-07-05 21:31:21

索引SQL分庫分表
點贊
收藏

51CTO技術棧公眾號

亚洲午夜久久久久中文字幕久| 欧美性受极品xxxx喷水| 日韩免费中文专区| 欧美韩日高清| 8x海外华人永久免费日韩内陆视频 | 日本在线视频www| 粉嫩一区二区三区性色av| 好吊色欧美一区二区三区| 欧美精品激情| 国产精品日韩一区二区免费视频| 午夜精品国产| 国产精品视频免费一区| 狠狠久久婷婷| 精品无码久久久久久久动漫| 亚洲综合另类| 中文字幕在线亚洲精品 | 欧美在线视频观看免费网站| 国产成人精品福利| 美女性感视频久久久| 久久九九精品视频| 久久久久久久久网站| 国产精品45p| 国产精品91视频| 亚洲一区二区三区| 精品欧美国产| 久久99国产精品尤物| 人人妻人人做人人爽| 久久理论电影网| 缴情综合网五月天| 午夜国产精品影院在线观看| 欧洲一级在线观看| 欧美一区二区二区| 黄色精品视频| 26uuu亚洲国产精品| 香蕉久久网站| 亚洲看片网站| 成人免费高清视频在线观看| 欧美成人福利在线观看| 五月天激情综合| 日本无删减在线| 中文字幕国产精品久久| 伊人久久综合影院| 国产精品视频免费一区二区三区| 久久精品国产77777蜜臀| 99精品人妻少妇一区二区| 一区二区三区免费观看| а√天堂官网中文在线| 久久天天躁日日躁| 欧美gay男男猛男无套| 欧美日韩一区二区视频在线观看| 成人国产精品免费观看动漫| 最近中文字幕mv第三季歌词| 日韩一区二区三区三四区视频在线观看| 在线精品亚洲欧美日韩国产| 久久琪琪电影院| 99成人精品| 国产精品少妇在线视频| 一本到不卡免费一区二区| 日韩激情电影免费看| 国产精品亚洲视频在线观看| 欧美18xxxx| 国产欧美综合精品一区二区| 国内成人精品2018免费看| 99999色| 欧美一区二区三区性视频| 亚洲欧洲专区| 亚洲最大色网站| 日本在线观看www| 欧美久久久精品| 99亚洲一区二区| 五月天亚洲视频| 日韩久久久精品| 神马久久av| 一区二区三区不卡在线| 一区二区三区自拍| 涩涩av在线| 成人免费视频观看视频| 久久久久久**毛片大全| av在线免费网址| 日本欧美一级片| 国产剧情在线观看一区二区| 日韩私人影院| 欧美大肥婆大肥bbbbb| 老司机午夜精品视频在线观看| 1234区在线观看视频免费| 亚洲成人av资源网| 日韩欧美大片| 中文久久久久久| 亚洲精品久久久久久久久久久| 日韩成人精品一区| 欧美精品第三页| 亚洲精品av在线| 伊人精品视频| 宅男午夜在线| 性欧美视频videos6一9| 成人久久久精品乱码一区二区三区| 欧美jizz18hd性欧美| 91久久久久久久一区二区| 最新国产の精品合集bt伙计| 日韩久久一区| 中文字幕在线亚洲三区| 777午夜精品视频在线播放| 久久国产中文字幕| 上原亚衣加勒比在线播放| 色婷婷综合久久久久| 精品在线一区二区三区| 日本不卡不卡| 国产精品二区在线观看| 亚洲成av人片在www色猫咪| 欧美尿孔扩张虐视频| 凹凸日日摸日日碰夜夜爽1| 在线播放日韩av| 精品一区二区三区免费| 欧美日韩色网| 国产午夜精品在线| 色一情一乱一乱一91av| 久久一本综合| 中文天堂在线观看| 欧美在线视频免费| 亚洲少妇屁股交4| 思热99re视热频这里只精品 | 免费在线视频一级不卡| 国产91色在线| 亚洲精品一二三区| 日本天堂一区| 99爱视频在线观看| 91高清免费视频| 国产精品久久久爽爽爽麻豆色哟哟| 国产精品亚洲综合在线观看 | 日本欧美中文字幕| 国产精品久久久久久久久免费丝袜 | 亚洲sss视频在线视频| 精品久久一区| 视频在线91| 亚洲在线一区二区| 欧美日韩在线播放三区四区| 国产精品va| 精产国品自在线www| 日韩国产高清一区| 欧美精品一区二区三区在线播放 | 一级特黄大欧美久久久| 手机在线电影一区| www.在线播放| 韩国一区二区三区美女美女秀| 3d成人h动漫网站入口| 麻豆91精品视频| 久久亚洲精品人成综合网| 99精品人妻少妇一区二区| 欧美最近摘花xxxx摘花| 亚洲一区二三区| 欧美午夜视频| 亚洲欧美综合色| 久久一区中文字幕| 日韩美女啊v在线免费观看| 欧美日韩在线另类| 亚洲va国产va天堂va久久| 中文字幕在线影视资源| 自产国语精品视频| 亚洲国产精品黑人久久久| 欧美群妇大交群中文字幕| 97视频在线观看视频免费视频 | 国产三级在线播放| 精品91福利视频| 亚洲美女免费视频| 欧美日韩三级视频| 国产精品久久久久久亚洲调教| 91av在线国产| 欧洲久久久久久| 一本一本久久a久久精品综合妖精| 一区二区免费在线观看| 成人av资源网| 婷婷丁香在线| 波多野结衣在线一区二区| 亚洲精品影院在线观看| 亚洲精品3区| 久久99久久99| 亚洲国产一二三| 欧美一二三区在线| 97人人模人人爽视频一区二区| 久久在线观看免费| 95精品视频在线| 日本韩国欧美国产| 国产精品看片资源| 精品视频在线观看一区| 182tv在线播放| 欧美xxxx中国| av中文字幕不卡| 91久久人澡人人添人人爽欧美| 亚洲区免费影片| 韩国黄色一级大片| 在线欧美三级| 日韩精品手机在线观看| 亚洲最大色综合成人av| 人人澡人人添人人爽一区二区| sm在线观看| 日韩中文字幕1| 精品久久久久久久久久久久久久久 | 一区二区三区免费看视频| 婷婷久久综合九色综合绿巨人| 激情懂色av一区av二区av|