MySql學習筆記(九):索引失效

數據準備:mysql

CREATE TABLE `t_blog` (
  `id` int(11) NOT NULL auto_increment,
  `title` varchar(50) default NULL,
  `typeId` int(11) default NULL,
  `a` int(11) default '0',
  PRIMARY KEY  (`id`),
  KEY `index_1` USING BTREE (`title`,`typeId`,`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

一、複合索引丟失第一列字段:
image.pngsql

二、複合索引,跳過中間字段:ide

先來看查詢條件只有第一列時的結果:
函數

image.png

接下來執行跳過中間字段的狀況:性能

image.png

此時索引確實生效,但key_len依舊是153,理論上查詢精度越大key_len會越大,但此時並無增大就表示條件【a='123'】上的索引並無用到。spa

複合索引應當遵照【最左前列原則】,即:查詢應該從索引的最左前列開始而且不能跳過中間列,一旦跳過某個列,該列以後的列上的索引都會失效blog

三、在索引上進行計算、函數、類型轉換等操做致使索引失效:
使用函數:
索引

image.png

進行自動類型轉換,title定義的是varchar類型,但查詢時給他賦值int致使mysql會自動給他進行類型轉換致使索引失效rem

image.png

使用  + - * / 等計算it

image.png

四、使用了範圍致使該索引以後的索引失效

先來看一下沒使用範圍的sql執行狀況:

image.png

隨着查詢精度的增大,key_len增大,表示兩個條件的索引均有效,如今在範圍以後再添加一個查詢條件:

image.png

key_len依舊保持158,說明票【a=1】這個條件上的索引是失效的。

五、使用不等於操做(!= 或 <>)

image.png

六、使用 is not null 

image.png

七、使用前導模糊查詢

先來看後導查詢:

image.png

此時索引並無失效,再來看先後導模糊查詢:

image.png

此時索引已經失效,那麼單獨使用前導查詢:

image.png

此時索引失效,所以,使用前導查詢會致使索引失效。

八、mysql不走索引會有更好的查詢性能時索引失效

相關文章
相關標籤/搜索