索引執(zhí)行計劃查看(explain)

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)

圖片.png

使用explain觀察索引的執(zhí)行計劃


圖片.png

4 沒有索引

圖片.png

5 左原則,驗(yàn)證使用%-時索引的失效

  1. 給t1字段增加一個普通的索引
alter table test_1 add index t1(t1);
圖片.png
  1. 增加索引之后正常的進(jìn)行一次查詢


    圖片.png
  2. 使用like驗(yàn)證索引的失效


    圖片.png

不正常的情況,使用在關(guān)鍵字的左邊使用%

圖片.png

圖片.png

6 OR的使用

  1. 驗(yàn)證左邊的字段有索引而右邊的字段沒有索引
圖片.png
  1. 給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');
圖片.png

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

圖片.png
  1. 使用復(fù)合索引的查詢:


    圖片.png
  2. 驗(yàn)證使用t1字段時,看索引是否生效(t1是建立聯(lián)合索引時左邊的字段)


    圖片.png
  3. 驗(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');

圖片.png
  1. 驗(yàn)證字符串型的數(shù)字不加引號,看索引是否有效


    圖片.png
  2. 驗(yàn)證字符串型的數(shù)字添加引號是,索引的使用情況


    圖片.png

總結(jié):索引不是越多越好,因?yàn)槊拷⒁粋€索引,索引文件就會變大,當(dāng)這個文件比較大時,查詢的速度依舊是很慢的.但是索引是我們知道的最方便最有效,最廉價的優(yōu)化手段.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容