就這一題題目來講
query tree就應該能夠最佳化了吧
理論上MySQL應該也要能夠做到最佳化才對(我沒實際驗證過 只是就理論上來講)
在建出query tree的時候
第二個步驟
就會把select(關聯式代數的select 可以把它想像是SQL的WHERE)向下移動
第三個步驟 調整樹結構
就會把最嚴格的要求放到最靠近terminal的地方
因此WHERE xxx=xxx就會最先被執行
所以你的INNER JOIN不管是否寫在JOIN敘述 或是WHERE子句裡
理論上都會被optimize成相同的query tree的
※ 引述《grassboy2 (活力花俏草兒Grassboy大렩》之銘言:
: 嗯…想要問一下關於他的用法…
: 就是啊…當我在執行
: SELECT `tableA`.`attr1` `tableB`.`attr1`
: FROM `tableA` INNER JOIN `tableB`
: ON `tableA`.`id` = `tableB`.`foreign_id`
: WHERE `tableA`.`id` = '123' 時
: MYSQL會對那些`tableA`.`id` <> '123'的資料也先作JOIN嗎?
: 如果會的話@@~那…感覺在資料量一多的時候…
: 無法滿足WHERE條件的資料一定會很多…不就作了一堆無謂的JOIN了嗎@@~
: 那…INNER JOIN的效率感覺很差耶@@~
: 最近看到INNER JOIN滿想問這問題的^^"
: 板上的高手可以指點一下嗎><~謝謝囉~
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.109.169.200
※ 編輯: seagal 來自: 140.109.169.200 (07/27 22:27)