快速定位mysql是否走索引

2021-10-14 18:10:58 字數 2067 閱讀 7518

1. 依賴表結構及測試資料:

create

table

`student`

(`student_id`

int(11)

default

null

,`student_name`

varchar

(255

)character

set utf8 collate utf8_bin default

null

,`subject`

varchar

(255

)character

set utf8 collate utf8_bin default

null);

insert

into

`student`

values(1

,'張三'

,'語文');

insert

into

`student`

values(2

,'李四'

,'數學');

insert

into

`student`

values(3

,'王二'

,'語文');

insert

into

`student`

values(4

,'權一'

,'**');

insert

into

`student`

values(5

,'孫五'

,'語文'

);

create

table

`orders`

(`student_id`

int(11)

default

null

,`order_id`

int(11)

default

null);

insert

into

`orders`

values(1

,1);

insert

into

`orders`

values(2

,2);

insert

into

`orders`

values(3

,3);

insert

into

`orders`

values(4

,4);

2. 基本關聯查詢sql
select

*from student t1

join orders t2

on t1.student_id = t2.student_id

3. 檢視執行計畫

所謂執行計畫,顧名思義,就是對乙個查詢任務,做出乙份怎樣去完成任務的詳細方案

資料庫裡使用 explain + sql語句來檢視

執行explain + 上面sql得到

4. 增加索引

執行

alter

table student add

index stu_id(student_id)

;alter

table orders add

index orders(student_id)

;

資料庫裡使用 explain + sql語句來檢視

執行explain + 上面sql得到

從上面兩個執行計畫對比可以看出,第二個查詢是走在索引上的

由於資料量較小,所以看不出查詢效率的差別,當資料量大時,可以看出明明顯的差別,

這樣就可以簡單的判斷查詢是否走在索引上,可以快速的定位和優化

mysql不走索引總結

在mysql查詢語句中,總會發現明明已經建立了查詢字段索引,可是卻沒有用到,這是因為在mysql中有些查詢語句是用不到索引的,總結如下,以供大家分享。1.like語句 2.列型別為字串型別,查詢時沒有用單引號引起來 3.在where查詢語句中使用表示式 4.在where查詢語句中對字段進行null值...

記一次mysql不走索引的問題定位

問題 sql為三表關聯,關聯的字段上都加上了唯一索引,查詢時卻不走索引導致sql執行超時。檢視explain都走的all全表掃瞄。基於上述定位 為什麼沒走索引呢?進行多表關聯查詢時,要滿足 1 表關聯使用的條件欄位中字段的長度是否是一致的 2 兩表關聯使用的條件欄位中字段的編碼是否是一致的 以上兩個...

mysql哪些情況不走索引

在mysql中,並不是你建立了索引,並且你在sql中使用到了該列,mysql就肯定會使用到那些索引的,有一些情況很可能在你不知不覺中,你就 成功的避開了 mysql的所有索引。現假設有t stu表,age,sname上建立了索引 如果where條件中age列中使用了計算,則不會使用該索引 selec...