1 SQL語句注意項(xiàng)(sql的失效)
1 like查詢時,關(guān)鍵字以%,_開頭的則索引失效(左原則)
2 or 查詢時,左右兩側(cè)都要建立索引,如果只有一側(cè)有索引,則索引無效.
3 如果是聯(lián)合索引的話,單獨(dú)使用索引查詢時,使用左邊的關(guān)鍵字索引是有效的,而右邊的無效 index(field1,field2)
4 字符串類型的列,在使用where查詢時必須加上單引號.
2、測試SQL語句
create table test_1 (
id int primary key auto_increment,
t1 varchar(100),
t2 varchar(100)
)engine=myisam;
insert into test_1 values
(null,'a','a'),
(null,'ab','ab'),
(null,'abc','abc'),
(null,'abcd','abcd');
數(shù)據(jù)插入成功之后觀察
圖片.png
3 索引的檢索(where)

使用explain觀察索引的執(zhí)行計劃
圖片.png
4 沒有索引

5 左原則,驗(yàn)證使用%-時索引的失效
- 給t1字段增加一個普通的索引
alter table test_1 add index t1(t1);

-
增加索引之后正常的進(jìn)行一次查詢
圖片.png -
使用like驗(yàn)證索引的失效
圖片.png
不正常的情況,使用在關(guān)鍵字的左邊使用%


6 OR的使用
- 驗(yàn)證左邊的字段有索引而右邊的字段沒有索引

-
給t2這個字段也增加一個索引
圖片.png
7 組合(復(fù)合)索引
create table test_2 (
id int primary key auto_increment,
t1 varchar(100),
t2 varchar(100)
)engine=myisam;
insert into test_2 values
(null,'a','a'),
(null,'ab','ab'),
(null,'abc','abc'),
(null,'abcd','abcd');

為test_2添加一個復(fù)合索引

-
使用復(fù)合索引的查詢:
圖片.png -
驗(yàn)證使用t1字段時,看索引是否生效(t1是建立聯(lián)合索引時左邊的字段)
圖片.png -
驗(yàn)證使用t2時,看索引是否生效’
圖片.png
總結(jié):當(dāng)建立復(fù)合索引時,索引右側(cè)的字段單獨(dú)使用時,索引是失效的.
8 索引覆蓋的實(shí)現(xiàn)
就是每一個表中字段都建立了,索引,再次執(zhí)行查詢時,就不用去數(shù)據(jù)文件中查詢,只要在索引文件中查詢即可,滿足條件.
9 如果where后面是字符串類型的數(shù)字時,那么就必須要加引號.
insert into test_1 values(null,'1234','12453');

-
驗(yàn)證字符串型的數(shù)字不加引號,看索引是否有效
圖片.png -
驗(yàn)證字符串型的數(shù)字添加引號是,索引的使用情況
圖片.png
總結(jié):索引不是越多越好,因?yàn)槊拷⒁粋€索引,索引文件就會變大,當(dāng)這個文件比較大時,查詢的速度依舊是很慢的.但是索引是我們知道的最方便最有效,最廉價的優(yōu)化手段.









