簡體   English   中英

SQL Server內部聯接和子查詢

[英]SQL Server inner join and subquery

我在查詢下方更新了HierarchicalTable上的某些ID。

我的第一個查詢是穩定的,但我的性能有問題:

DECLARE @targetName varchar(100)
UPDATE a
SET   a.PrimaryId = b.PrimaryId
    , a.SecondaryId = b.SecondaryId
FROM
(
    SELECT PrimaryId
         , SecondaryId
    FROM Hierarchical
    WHERE ParentName = @targetName
) as a
JOIN 
(
    SELECT PrimaryId
         , SecondaryId
    FROM Hierarchical
    WHERE Name = @targetName
) b
ON a.ParentId = b.Id

下一個查詢是我的第二個選擇:

DECLARE @targetName varchar(100)

UPDATE a
SET   a.PrimaryId = b.PrimaryId
    , a.SecondaryId = b.SecondaryId
FROM Hierarchical a
JOIN Hierarchical b
ON a.ParentId = b.Id
WHERE a.ParentName = @targetName
  AND b.Name = @targetName

我的問題是:

  1. 第二個查詢是否像第一個查詢一樣執行?

  2. 第二個查詢是否會勝過第一個查詢?

*注意:我有大量數據,我們在執行這些查詢時遇到硬件問題。

我已經在這里發布了,所以我可以得到任何我能看到的意見。

您的第一個查詢將不會執行,因為它缺少on子句。 我假設on子句真的是a.Id = b.Id

您要問的問題是如何優化查詢。 回答的真正方法是查看查詢計划,您可以在SQL Server Management Studio中輕松查看該計划。 您可以從文檔開始沿着這條路走下去。

但是,在您的情況下,您使用子查詢來說“在讀取數據時執行過濾”。 實際上,SQL Server通常將這種過濾操作推送到表讀取,因此子查詢可能是多余的。

如果你想提高性能,我建議你在表上有以下索引: hierarchical(parentname, id)hierarchical(name, id) 這些應該可以提供良好的性能提升。

暫無
暫無

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

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