亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

select * from a join b on a.id=b.a_id中a是否全表掃描?

select * from a join b on a.id=b.a_id中a是否全表掃描?

萬千封印 2019-03-10 14:32:45
存在兩個表a、b,b中一列a_id作為外鍵存儲a表id且有索引select * from a join b on a.id=b.a_id問1:以上sql是否a表全表掃描,b表使用索引?select * from b join a on a.id=b.a_id問2:以上sql(join前后a、b順序對調)是否b表全表掃描,a表使用索引?
查看完整描述

2 回答

?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

除非手動指定驅動表(STRAIGHT_JOIN),否則 mysql 優化器會以代價最小的那個表作為驅動表,所以上面兩條語句在沒有特殊情況下,結果是一樣的,你可以 explain 看一下

就題主給出的sql,如果 a 為驅動表(a的數量比較少),那么 a 會全表掃描,b 的 a_id 能使用索引。當 b 為驅動表也可以這樣分析


查看完整回答
反對 回復 2019-03-10
?
慕后森

TA貢獻1802條經驗 獲得超5個贊

優化器自己判斷驅動表,如果要強制驅動 用STRAIGHT_JOIN

查看完整回答
反對 回復 2019-03-10
  • 2 回答
  • 0 關注
  • 1236 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號