我知道當我們在IN和NOT IN處使用EXISTS和NOT EXISTS時,查詢的性能得到了改進,但是,當性能進一步提高時我們用OUTER JOIN替換NOT IN而不是NOT EXISTS?在Oracle Database 12c中用NOT EXISTS和OUTER JOIN取代NOT IN
例如,以下查詢從PRODUCT表中選擇不在另一個稱爲PC的表中的所有模型。根據記錄,在產品或電腦桌沒有模型值爲空:
select model
from product
where not exists(
select *
from pc
where product.model = pc.model);
以下OUTER JOIN將顯示同樣的結果:
select product.model
from product left join pc
on pc.model = product.model
where pc.model is null;
看到,因爲這些都返回相同的值,這我們應該使用選項來更好地改進查詢的性能嗎?
兩者應該是一樣的。 Oracle有一個很好的優化器,這兩種表達方式都是半反連接。 –
「我明白,當我們在IN和NOT IN處使用EXISTS和NOT EXISTS時,查詢的性能得到了改進。」在某些情況下。在其他情況下,IN或NOT IN表現更好。性能取決於驅動查詢和子查詢的相對大小。 – APC