我在更新表格时遇到问题。我正在运行以下查询:
UPDATE Table1 SEt entrena = c.Count
FROM Table1 AS p INNER JOIN (
SELECT e.EmplID, COUNT(e.EmplID ) as Count
FROM Table2 AS e WHERE e.Start >= @Start AND e.Start <=@End
GROUP BY e.EmplID ) AS c ON p.EmplID = c.EmplID
WHERE P.Date = '2050-12-31'
Table1 有 12000 行,连接内的选择只有 51 行,但更新大约需要 2 分钟,但如果我删除 where clase p.date = '2050-12-31',更新时间不到第二。而且我不知道如何解决它。我正在使用 SQL Server 2008。
两个表都没有索引。
最佳答案
这是您的查询:
UPDATE Table1
SET entrena = c.Count
FROM Table1 p INNER JOIN
(SELECT e.EmplID, COUNT(e.EmplID ) as Count
FROM Table2 e
WHERE e.Start >= @Start AND e.Start <=@End
GROUP BY e.EmplID
) c
ON p.EmplID = c.EmplID
WHERE P.Date = '2050-12-31';
首先,您需要将第一行更改为:
UPDATE p
当您在 from
子句中定义别名时,您需要在 update
中使用它,以便正确的事情发生。 (我希望您的查询在 SQL Server 中生成错误,但事实并非如此。)
要优化此查询,您需要添加索引。我会建议这两个:
Table1(date, EmplID)
Table2(EmplId, Start)
然后您可能会发现相关子查询版本更快,特别是如果 where
子句是高度选择性的:
UPDATE p
SET entrena = (SELECT COUNT(e.EmplID ) as Count
FROM Table2 e
WHERE e.Start >= @Start AND e.Start <=@End AND
p.EmplID = e.EmplID
)
FROM Table1 p
WHERE P.Date = '2050-12-31';
但是,我怀疑 p
与 table1
是性能问题的根源。
关于sql - 加入更新需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25494933/