簡體   English   中英

SQL 服務器子查詢會導致性能損失嗎?

[英]Do SQL Server subqueries cause performance loss?

我用內部連接連接了 2 個表,但是 2 個表有同名的列。 我將查詢設為子查詢以僅使用所需的列。 如果我使用子查詢會導致速度下降嗎?

注意:我使用了翻譯

Select
    *
From 
    (Select
         t1.Id, ...
     From
         Table1 as t1
     left join
         Table2 as t2 on t1.Id = t2.ParentId
     --Where
         --Id = 123 This Line. Error : Ambiguous column name 'Id'.
    ) as Foo
where
    Id = 123

不需要子查詢。 您可以通過在列前加上它所屬的表來解決歧義:

select t1.Id, ...
from Table1 as t1
left join Table2 as t2 on t2.ParentId = t1.Id
where t1.Id = 123  -- presumably

至於您的原始查詢:在這里使用子查詢會影響性能嗎? 我希望像 SQL 服務器這樣的數據庫能夠預見將謂詞推送到子查詢的明顯優化。 但是您需要比較執行計划以確保。

請注意,如果您確實需要子查詢,通常最好預先過濾:

select t1.Id, ...
from (select * from Table1 where Id = 123) as t1
left join Table2 as t2 on t2.ParentId = t1.Id

在您的查詢中,包含where 條件的最后一行給出 ID 的別名,它將避免歧義錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM