Mysql之索引失效

2021-09-28 19:38:58 字數 2214 閱讀 3538

建立乙個index_test庫:create database index_test;

在index_test庫中建立一張user表:

use index_test;

create table `user`(

`id` bigint,

`name` varchar(50),

`age` int(4),

`gender` varchar(4),

'time' datetime

)engine = innodb;

1、復合索引最好最值匹配

在user上建立復合索引:create index idx_name_age_gender on `user`(`name`,`age`,`gender`) ;

(1)當使用復合索引順序查詢索引不失效:

explain select * from user where name='張三' and age=20 and gender='male';

(2)使用部分索引查詢(索引使用的字段是索引間的順序)索引不失效

explain select * from user where name='張三' and age=20;

(3)使用部分索引查詢(使用的字段順序不是索引建的順序),索引失效

explain select * from `user` where  age=20 and gender='male';

注意:違背最左字首原則

(4)使用name和gender,索引不失效,只是使用到部分索引

explain select * from `user` where name='張三' and gender='male';

注意:復合索引中間不能斷

2、不在索引列上做任何操作(計算,函式,型別轉換),會導致索引失效

explain select * from `user` where left(name,3)='neo'

3、儲存引擎不能使用索引中範圍條件右邊的列

explain select * from `user` where name='張三' and age>20 and gender='male';

4、盡量使用覆蓋索引(索引列和查詢列一致)不要使用select *

explain select name,age,gender from `user` where name='張三' and age=20 and gender='male';

explain select name,age,gender from `user` where name='張三' and age>20 and gender='male';

注意:和上面使用select *相比多出了using index

5、使用不等於(!=或者<>)時候會導致索引失效

explain select * from `user` where name='張三' and age!=20 and gender='male';

6、is null,is not null無法使用索引

explain select * from `user` where name is not null

7、like 以萬用字元開頭(『%...』)索引失效

explain select * from `user` where name like '%張'

explain select * from `user` where name like '張%'

注意:like時%加在右邊

如果業務需要使用「%...%」時,查詢字段需要和索引一致

8、字串不加單引號索引失效

explain select * from `user` where name=10

9、少用or,用它連線查詢時會索引失效

explain select * from `user` where name='張三' or name=『10』

mysql索引失效 常見mysql索引失效條件

使用索引的一般語句 1 where條件中有or,除非or的所有欄位都有索引,只要有乙個沒有索引,就不走索引 explain select from jf user ju where ju.user id or ju.superior1 yyy user id是主鍵,superior1是普通索引,結果...

mysql 主鍵失效 MySQL索引(索引失效)

索引 索引也是一張表,該錶儲存了主鍵與索引字段,並指向實體表的記錄。myisam儲存引擎,資料檔案 索引檔案 表結構檔案分開儲存 innodb儲存引擎,資料和索引儲存在乙個檔案中 b tree索引 hash索引 hash索引 只有memory儲存引擎支援 查詢一條記錄的速度非常快 b tree索引 ...

mysql 索引失效場景 Mysql 索引失效場景

例如 一張user表 有欄位屬性 name,age 其中name為索引 下面列舉幾個索引失效的情況 1.select from user where name xzz or age 16 例如這種情況 當語句中帶有or的時候 即使有索引也會失效。2.select from user where na...