如果您將它們寫入表單中,並且結果相同,則希望查詢分析器爲您提供相同的*查詢計劃。這就是說使用JOIN不,
,因爲,
是那麼清楚,並已經被廢棄了幾十年
如果要比較兩個不同的查詢的性能,最簡單的方法是同時運行和比較能維持多久雖然通過比較查詢計劃(mysql中的EXPLAIN query text here
將爲您提供查詢計劃)來檢查他們是否做了不同的事情,但請注意,說「我知道他們給出了不同的結果,但我想要更快的一個」在編程中從來不是一件明智的事情。你應該始終知道你想要的結果。
I.e.
select table1.a ,table2.b from table1 ,table2 where table1.id=table2.id
的含義
select table1.a ,table2.b from table1 join table2 on table1.id=table2.id
和
select table1.a ,table2.b from table1 left join table2 on table1.id=table2.id
相同的含義
select table1.a ,table2.b from table1 ,table2 where table1.id=table2.id
union
select table1.a , null from table1 where table1.id not in (select table2.id from table2)
和連接,你沒有使用相同的形式:
select table1.a ,table2.b from table1 right join table2 on table1.id=table2.id
的含義
select table1.a ,table2.b from table1 ,table2 where table1.id=table2.id
union
select null, table2.b from table2 where table2.id not in (select table1.id from table1)
而且
select table1.a ,table2.b from table1 full join table2 on table1.id=table2.id
的含義
select table1.a ,table2.b from table1 ,table2 where table1.id=table2.id
union
select table1.a , null from table1 where table1.id not in (select table2.id from table2)
union
select null, table2.b from table2 where table2.id not in (select table1.id from table1)
我不明白的問題一樣一樣的。你能否詳細說明一下? – 0xCAFEBABE
這兩者並不相同。 'LEFT JOIN'將返回沒有匹配'table2'行的'table1'行,笛卡爾積不會返回這些行。 – Barmar
@ 0xCAFEBABE使用上述兩種方式查詢出相同的數據,但我想知道在哪種情況下使用這種方式的性能會更好 – lpgad