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. 基本關聯查詢sqlselect
*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...