<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        你的like語句為什么沒索引詳解

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-09 20:23:21
        文檔

        你的like語句為什么沒索引詳解

        你的like語句為什么沒索引詳解:前言 本文旨在用最通俗的語言講述最枯燥的基本知識 這個話題比較有意思。昨天中午吃完飯間突然有個同事蹦出了一句:like有索引嗎?,我順口就說沒有,另一個同事反駁說有啊,還有些同事說看情況的有,這下有點(diǎn)懵逼了,都不知道那種說法是正確的,于是決定
        推薦度:
        導(dǎo)讀你的like語句為什么沒索引詳解:前言 本文旨在用最通俗的語言講述最枯燥的基本知識 這個話題比較有意思。昨天中午吃完飯間突然有個同事蹦出了一句:like有索引嗎?,我順口就說沒有,另一個同事反駁說有啊,還有些同事說看情況的有,這下有點(diǎn)懵逼了,都不知道那種說法是正確的,于是決定

        下面來講講這個MySQL提供的explain命令:

        語法:explain SQL語句例如:

        1explain select * from user where id=1

        執(zhí)行完畢之后,它的輸出有以下字段:

          id
          select_type
          table
          partitions
          type
          possible_keys
          key
          key_len
          ref
          rows
          Extra

        要想知道explain命名怎么使用,就必須把這些字段搞清楚

        1. id

        SELECT查詢的標(biāo)識符, 每個SELECT語句都會自動分配一個唯一的標(biāo)識符

        2. select_type

        每個select查詢字句的類型,具體類型以及對應(yīng)作用如下表:

        類型名 解釋
        SIMPLE 簡單SELECT,不使用UNION或子查詢等
        PRIMARY 查詢中若包含任何復(fù)雜的子部分,最外層的select被標(biāo)記為PRIMARY
        UNION UNION中的第二個或后面的SELECT語句
        DEPENDENT UNION UNION中的第二個或后面的SELECT語句,取決于外面的查詢
        UNION RESULT UNION的結(jié)果
        SUBQUERY 子查詢中的第一個SELECT
        DEPENDENT SUBQUERY 子查詢中的第一個SELECT,取決于外面的查詢
        DERIVED 派生表的SELECT, FROM子句的子查詢
        UNCACHEABLE SUBQUERY 一個子查詢的結(jié)果不能被緩存,必須重新評估外鏈接的第一行

        3. table

        顯示這一行的數(shù)據(jù)是查哪張表的,不過有時短路顯示的不是真實(shí)的表名。

        4. partitions

        匹配的分區(qū)(這個目前用處不大)

        5. type

        訪問類型,表示MySQL在表中找到所需行的方式,對應(yīng)的值和解釋如下:

        類型名 優(yōu)級別 解釋
        system 1 表僅有一行
        const 2 表最多有一個匹配行,在查詢開始時即被讀取
        eq_ref 3 使用primary key或者unique key作為多表連接的條件,僅從該表中讀取一行
        ref 4 作為查詢條件的索引在每個表匹配索引值的行從表中讀取出來
        fulltext 5 全文索引檢索
        ref_or_null 6 和ref一致,但增加了NULL值查詢支持
        index_merge 7 表示使用了索引合并優(yōu)化方法
        unique_subquery 8 使用了替換了in子查詢
        index_subquery 9 使用了替換了in子查詢,但只適用于子查詢中的非唯一索引
        range 10 只檢索給定范圍的行,使用一個索引來選擇行
        index 11 全表掃描,但掃描表的方式是按索引的次序進(jìn)行
        ALL 12 全表掃描的方式找到匹配的行

        type作為訪問類型,其值代表著當(dāng)前查詢所用的類型,是體現(xiàn)性能的一個重要指標(biāo),從表中可以看到,從上到下,掃描表的方式越來越寬,性能也就越來越差,因此,對于一個查詢,最好能保持在range級別以上。

        6. possible_keys

        主動指出查詢能用哪個索引在表中找到記錄也就是會列出在查詢中的字段中有索引的字段,但不一定被查詢所用。

        7. key

        顯示再查詢中實(shí)際使用的索引/鍵,如果沒有索引,則顯示NULL。但如果想強(qiáng)制查詢中使用或忽視possible_keys列中的索引,則可以在查詢中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。

        8. key_len

        表示索引中使用的字節(jié)數(shù)。

        9. ref

        表示哪些列或常量被用于查找索引列上的值。

        10. rows

        顯示當(dāng)前查詢估算到的查找到匹配記錄所需的記錄行數(shù)。

        11. Extra

        顯示當(dāng)前查詢所用的解決方式,它有以下幾種情況:

        類型名 解釋
        Using where 列數(shù)據(jù)是從僅僅使用了索引中的信息而沒有讀取實(shí)際的行動的表返回的,
        Using temporary 表示MySQL需要使用臨時表來存儲結(jié)果集,常見于排序和分組查詢
        Using filesort MySQL中無法利用索引完成的排序操作稱為“文件排序”
        Using join buffer 改值強(qiáng)調(diào)了在獲取連接條件時沒有使用索引,并且需要連接緩沖區(qū)來存儲中間結(jié)果。如果出現(xiàn)了這個值,那應(yīng)該注意,根據(jù)查詢的具體情況可能需要添加索引來改進(jìn)能。
        Impossible where 這個值強(qiáng)調(diào)了where語句會導(dǎo)致沒有符合條件的行。
        Select tables optimized away 這個值意味著僅通過使用索引,優(yōu)化器可能僅從聚合函數(shù)結(jié)果中返回一行

        講完了語法,我們來實(shí)際操作一波,首先創(chuàng)建個表:

        -- 創(chuàng)建表
        CREATE TABLE test(
        id INT(11) NOT NULL AUTO_INCREMENT,
        uname VARCHAR(255),
        PRIMARY KEY(id) 
        );

        然后給uname字段加上索引:

        -- 添加索引
        ALTER TABLE test ADD INDEX uname_index (uname);

        查看一下索引是否添加成功:

        -- 查看是否有索引
        SHOW INDEX FROM test;

        輸出結(jié)果為:

        可以看出索引已經(jīng)創(chuàng)建成功,接下來添加一些數(shù)據(jù):

        -- 添加一些數(shù)據(jù)
        INSERT INTO test VALUES(1,'jay');
        INSERT INTO test VALUES(2,'ja');
        INSERT INTO test VALUES(3,'bril');
        INSERT INTO test VALUES(4,'aybar');

        一切準(zhǔn)備就緒,下面用explain這個命令來探究一些like語句是否有索引,like有四種情況,分別為沒有%、 %% 、左%、右%、

        1. like 字段名

        EXPLAIN SELECT * FROM test WHERE uname LIKE 'j'; 

        輸出為:

        可以看出:type的值為:range,key的值為uname_index,也就是說這種情況下,使用了索引。

        2. like %字段名%

        EXPLAIN SELECT * FROM test WHERE uname LIKE '%j%'; 

        輸出為:

        可以看出:type的值為ALL也就是全表掃描,而且key的值為NULL,也就是說沒用到任何索引。

        3. like %字段名

        EXPLAIN SELECT * FROM test WHERE uname LIKE '%j'; 

        輸出為:

        可以看出:type的值為ALL,key的值為NULL,同樣沒用到索引。

        4. like 字段名%

        EXPLAIN SELECT * FROM test WHERE uname LIKE 'j%'; 

        輸出為:

        可以看出:type的值為:range,key的值為uname_index,也就是說這種情況下,使用了索引。

        總結(jié)

        由上面的試驗(yàn)可以總結(jié)出like是否使用索引的規(guī)律:like語句要使索引生效,like后不能以%開始,也就是說 (like %字段名%)  、(like %字段名)這類語句會使索引失效,而(like 字段名)、(like 字段名%)這類語句索引是可以正常使用。

        其它

        為了查證like索引的問題,研究了MySQL神奇explain,但explain不僅僅只能檢查索引使用情況,還可以提供很多其它的性能優(yōu)化方面的幫助,至于具體的使用,其實(shí)跟上面講的一樣,把explain結(jié)果列出來,然后順藤摸瓜查閱相關(guān)的字段就可以得到相應(yīng)的內(nèi)容。

        好了,

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        你的like語句為什么沒索引詳解

        你的like語句為什么沒索引詳解:前言 本文旨在用最通俗的語言講述最枯燥的基本知識 這個話題比較有意思。昨天中午吃完飯間突然有個同事蹦出了一句:like有索引嗎?,我順口就說沒有,另一個同事反駁說有啊,還有些同事說看情況的有,這下有點(diǎn)懵逼了,都不知道那種說法是正確的,于是決定
        推薦度:
        標(biāo)簽: 索引 like like語句
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 黄色网址免费在线观看| 亚洲人成电影在线播放| 亚洲 国产 图片| 亚洲AV人无码激艳猛片| 久久久久久久国产免费看| 国产精彩免费视频| 亚洲最大视频网站| 91嫩草国产在线观看免费| 亚洲精品tv久久久久| 日韩精品无码永久免费网站| 日本在线看片免费人成视频1000| 亚洲AV无码国产精品麻豆天美| 国产三级在线免费| 麻豆亚洲av熟女国产一区二| 国内精自视频品线六区免费| 亚洲综合日韩久久成人AV| 免费人成又黄又爽的视频在线电影| 日本无卡码免费一区二区三区| AV在线亚洲男人的天堂| 中文字幕无码一区二区免费| 久久久久亚洲AV无码专区首JN | 成全视频免费高清| 亚洲av成本人无码网站| 亚洲爽爽一区二区三区| 亚洲国产精品成人综合色在线| 亚洲AV蜜桃永久无码精品| 99精品全国免费观看视频..| 四虎永久在线精品免费观看地址 | 日韩精品人妻系列无码专区免费| 亚洲狠狠爱综合影院婷婷| 亚洲一区二区三区高清在线观看| 无码专区AAAAAA免费视频| 亚洲电影在线免费观看| 无码国模国产在线观看免费| 亚洲免费在线观看| 亚洲AV无码一区二区三区在线观看| 中文字幕乱码亚洲无线三区| 亚洲精品无码久久毛片| 97公开免费视频| 美女啪啪网站又黄又免费| 免费人成在线观看播放国产|