繁体   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