使用索引時的建議
索引的使用規則
建表
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的順序可以...