成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

模糊搜索c1 like '%a%'真的都不能走索引么

數據庫 MySQL
在MySQL數據庫使用規范或優化建議中都明確說類似 like '%a%'的寫法不走索引。那么,真的是在任何條件下這種寫法都不能走索引么?

某DBA:like '%a%'肯定走不了索引的。。。

在MySQL數據庫使用規范或優化建議中都明確說類似 like '%a%'的寫法不走索引。那么,真的是在任何條件下這種寫法都不能走索引么?

1、不走索引的情況

創建一個測試表并插入測試數據

CREATE TABLE test_tb1(
id INT PRIMARY KEY ,
c1 VARCHAR(10),
c2 VARCHAR(20),
KEY idx_c1(c1)
);
INSERT INTO  test_tb1 
VALUES
(1,'abc','dwdwdwd'),
(2,'cadw','kklll'),
(3,'rtyu','093jx'),
(4,'sfgh','pl;,efdsf'),
(5,'l,mi','45223sda'),
(6,'rty',',ngykmb'),
(7,'mju','wedffd'),
(8,'tyuo','yuxx'),
(9,'oiuyr','qwert'),
(10,'ytuion','wwwwww');

進行測試 c1 LIKE '%a%'的寫法是否走索引。

EXPLAIN SELECT * FROM test_tb1 WHERE c1 LIKE '%a%';

結果如下:

圖片

從執行計劃來看,符合我們一貫的認知。

2、走索引的情況

重新創建一個表,并插入數據

# 創建表
CREATE TABLE test_tb2(
id INT PRIMARY KEY ,
c1 VARCHAR(10),
KEY idx_c1(c1)
);
# 插入數據
INSERT INTO  test_tb2
VALUES
(1,'abc'),
(2,'cadw'),
(3,'rtyu'),
(4,'sfgh'),
(5,'l,mi'),
(6,'rty'),
(7,'mju'),
(8,'tyuo'),
(9,'oiuyr'),
(10,'ytuion');

此時使用上述相同的SQL來看一下執行計劃。

EXPLAIN SELECT * FROM test_tb2 WHERE c1 LIKE '%a%';

圖片

此時結果與之前不同了,可以走索引了。

3、簡述原因

(1)索引內容

上述2例中的差別在于test_tb1比test_tb2多了一個c2字段,這導致在進行c1 like '%a%'查詢時,一級索引(主鍵索引)primary key 及二級索引(輔助索引)idx_c1的執行代價不同。

在MySQL中,主鍵索引存儲的是主鍵字段及對應的整條記錄的數據,即所有的數據都是按照主鍵進行排序組織在主鍵索引上的。而二級索引存儲的數據是按照對應的字段排序后的數據,包含索引字段+主鍵字段。

以上兩例中,一級索引與二級索引的內容如下:

例1

例2:

如果例1中使用c1索引,則過程是,先在c1索引上進行整個索引的掃描,然后找到主鍵字段,因為找到的內容還缺少c2的值,因此需要再回到主鍵索引上進行檢索,拿到所有字段的內容,這個代價相對較高

而例2中,掃描c1索引后,便得到了所有需要返回的值,而不需要再回主鍵索引上取其他內容(因為c1索引上已經有主鍵字段),因此可以選擇走c1索引。

PS:成本計算當然不止這些內容,還有一套公式,本次不贅述。

(2)例1的改寫

通過上面的對比,如果想例1中也走索引,可以只查詢c1字段或c1及主鍵id字段,此時也是可以走索引的,例如:

EXPLAIN SELECT id,c1 FROM test_tb1 WHERE c1 LIKE '%a%';

圖片

EXPLAIN SELECT c1 FROM test_tb1 WHERE c1 LIKE '%a%';

圖片

EXPLAIN SELECT id FROM test_tb1 WHERE c1 LIKE '%a%';

圖片

PS:全模糊搜索還有其他的方式解決,另外也可以使用ES等來解決。

4、小結

在數據庫學習的過程中,不可只記結論而忽視其原理。另外還有很多所謂的規范都是需要區別對待的,你知道的還有什么需要區別處理的數據庫規范么?

責任編輯:姜華 來源: 數據庫干貨鋪
相關推薦

2011-03-11 11:42:19

SAPSaaS云計算

2010-06-29 11:40:09

云計算公共云私有云

2010-01-29 09:08:49

甲骨文收購SunJava

2019-10-21 09:36:06

互聯網數據技術

2021-03-15 08:24:32

Windows 10Windows微軟

2021-03-13 12:05:54

微信朋友圈移動應用

2009-06-27 20:36:00

2019-09-16 20:00:52

C語言編程語言

2009-01-16 14:38:24

經濟危機 CIO

2021-04-13 11:38:44

SASE零信任網絡安全

2022-06-13 11:43:15

數據庫MySQL索引

2011-06-14 22:09:10

方正臺式機

2015-07-29 16:21:25

續航

2021-09-18 08:06:17

數據庫MySQL技術

2016-10-26 19:05:02

2010-10-11 09:49:22

云計算

2010-08-31 13:37:53

MeeGoIntel

2012-06-05 10:26:45

2011-11-25 10:09:28

2020-11-20 06:13:04

Like %
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩av最新网址 | 欧美一二三区 | 精品久久久久久久久久久 | 91视频电影 | 日韩一级免费电影 | 日韩欧美二区 | 日本成人一区二区 | 久久国产精品视频观看 | 一区二区精品视频 | 成人免费淫片aa视频免费 | 56pao在线| 一区二区免费在线 | 久久国产综合 | 91亚洲一区| 美女黄网 | 亚洲经典一区 | 中文字幕第十五页 | 911网站大全在线观看 | 亚洲系列第一页 | 亚洲精品久久久久久一区二区 | 成人欧美一区二区三区在线观看 | 青青久久av北条麻妃海外网 | 国产区在线观看 | 亚洲综合无码一区二区 | 成年免费大片黄在线观看一级 | 91精品久久| 精品在线免费观看视频 | 色爱综合网 | 成人免费观看视频 | 国产999精品久久久影片官网 | 婷婷色国产偷v国产偷v小说 | 日韩在线小视频 | 精品1区2区 | 男人电影天堂 | 欲色av | 日韩一区二区福利视频 | 天天色综| 亚洲黄色高清视频 | 欧美午夜精品久久久久久浪潮 | 福利精品 | 成人精品免费视频 |