我有一种情况,我将在存储过程中执行以下查询,这是sql代理作业的一部分,并且需要数小时才能完成执行。谁能建议一种更好的方法来重写此查询? #ownership
表有150万条记录。
WHILE (@last_update > 0)
BEGIN
INSERT INTO #ownership
SELECT DISTINCT
a.ParentNumber,
b.ChildNumber
FROM #ownership a,
#ownership b
WHERE a.ChildNumber = b.ParentNumber
AND NOT EXISTS (SELECT 1
FROM #ownership c
WHERE c.ParentNumber = a.ParentNumber
AND c.ChildNumber = b.ChildNumber)
SET @last_update = @@ROWCOUNT
END
答案 0 :(得分:0)
对于此代码的性能,您可以做的最重要的事情是在#ownership
上索引ParentNumber, ChildNumber
。