【发布时间】:2019-05-02 04:20:36
【问题描述】:
我有一个场景,我在存储过程中执行以下查询作为 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
【问题讨论】:
-
当@last_update
-
也许去掉不同的,看看需要多长时间,看看结果。
-
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(25 多年前),不鼓励使用它 -
@Squirrel:谢谢-更新:sqlblog.org/2009/10/08/bad-habits-to-kick-using-old-style-joins
标签: sql sql-server stored-procedures query-performance