我意識到這個例子完全是人爲的,但我在這裏尋找一個一般的經驗法則;這兩個查詢之間的性能觀點有什麼不同嗎?速度更快,引用外部表中的屬性還是比較參數?
實施例1:參考表外:
select o.id, o.name,
(select count(*) from inner_table i1 where i1.outerid = o.id),
(select sum(i2.amount) from other_inner_table i2 where i2.outerid = o.id)
from outer_table o
where o.id = @outerid
實施例2:直接針對參數進行比較:
select o.id, o.name,
(select count(*) from inner_table i1 where i1.outerid = @outerid),
(select sum(i2.amount) from other_inner_table i2 where i2.outerid = @outerid)
from outer_table o
where o.id = @outerid
我主要使用SQL Server 2008 R2,但我很對任何RDMS特有的答案感興趣。
更新:
我意識到這是hightly語境;我想我只是好奇,如果這只是一個風格的選擇,或者如果有情況下,這實際上會有所作爲。我意識到我可以對特定情況進行「測試並查看」 - 但這不是我追求的答案。
測試一下,看看。 –
在一個使用空表(在2008下,不是R2)的快速實驗中,在這兩種情況下,謂詞'outerid = @ outerid'用於內部表(即優化程序將示例1轉換爲類似於示例2的東西)。但正如其他人所說,你需要在你的系統上試用它,包括你的數據,索引等。 –
@Damien_The_Unbeliever - 如果你將你的評論作爲答案(帶有一些背景數據等),我會接受它作爲答案,因爲它是最接近我在這裏尋找的。 – DanP