MySQL 索引的使用規則

2021-10-03 09:34:28 字數 3685 閱讀 2073

使用索引時的建議

索引的使用規則

建表

create

table staffs(

id int

primary

keyauto_increment

,name varchar(24

)not

null

default

''comment

'姓名'

,age int

notnull

default

0comment

'年齡'

,pos varchar(20

)not

null

default

''comment

'職位'

,add_time timestamp

notnull

default

current_timestamp

comment

'入職時間'

)charset utf8 comment

'員工記錄表'

;insert

into staffs(name,age,pos)

values

('z3',22

,'manager');

insert

into staffs(name,age,pos)

values

('july',23

,'dev');

insert

into staffs(name,age,pos)

values

('2000',23

,'dev');

alter

table staffs add

index idx_staffs_nameagepos(name,age,pos)

;

索引全值匹配
explain

最左字首法則

如果索引了多列,要遵守最左字首法則。指查詢從索引的最左列開始並且不跳過索引中的列

不在索引列上做任何操作

不在索引列上做任何操作(計算、函式、(自動或手動)型別轉換),會導致索引失效而轉向全表掃瞄

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

使用覆蓋索引

盡量使用覆蓋索引(索引列和查詢列一致),減少select *

使用不等於(!= 或者<>)時 索引失效

explain

select

*from staffs where name=

'july'

;explain

select

*from staffs where name!=

'july'

;explain

select

*from staffs where name <>

'july'

;

like以萬用字元開頭,索引失效

如果業務中必須要使用到like %xx%的情況,不能使用索引,怎麼辦呢?

這個時候可以嘗試使用到覆蓋索引

字串不加單引號索引失效

## name 是varchar型別,這裡2000會隱式型別轉為字元

少用or,用它連線是 索引會失效

使用索引時的建議

mysql聯合索引的使用規則

從一道有趣的題目開始分析 假設某個表有乙個聯合索引 c1,c2,c3,c4 以下選項哪些字段使用了該索引 a where c1 x and c2 x and c4 x and c3 x b where c1 x and c2 x and c4 x order by c3 c where c1 x a...

mysql 聯合索引使用規則

從一道有趣的題目開始分析 假設某個表有乙個聯合索引 c1,c2,c3,c4 以下選項哪些字段使用了該索引 a where c1 x and c2 x and c4 x and c3 x b where c1 x and c2 x and c4 x order by c3 c where c1 x a...

mysql索引規則

1.最左字首匹配原則,非常重要的原則,mysql會一直向右匹配直到遇到範圍查詢 between like 就停止匹配,比如a 1 and b 2 and c 3 and d 4 如果建立 a,b,c,d 順序的索引,d是用不到索引的,如果建立 a,b,d,c 的索引則都可以用到,a,b,d的順序可以...