【发布时间】:2011-10-10 18:52:20
【问题描述】:
cte 有时会占用大量内存。在其他数据库出现内存问题之前,以下 SQL 运行良好。
关于如何使用派生表重现 Row_Number Over Partition 的任何想法。
表 A 存放着工作电话。 表 B 保存 ID。 我们必须将表 A 与表 B 连接起来才能在表 B 中找到重复项;使用手机作为重复条件。
此 SQL 有效。我只想查看使用派生表的建议。
;WITH cte
AS (SELECT Row_number() OVER (PARTITION BY a.WorkPhone ORDER BY b.id DESC ) AS
rownumber
,
a.WorkPhone,
a.id
FROM TableB B
JOIN TableA a
ON b.GroupofLeadsid = a.id
WHERE b.GroupofLeads = @GroupofLeads
AND NOT a.WorkPhone IS NULL
AND a.WorkPhone <> '')
UPDATE b
SET b.deleteflag = 1
FROM TableB b
JOIN cte t
ON b.id = t.id
WHERE b.GroupofLeads = @GroupofLeads
AND rownumber > 1
【问题讨论】:
-
这个问题的整个概念没有意义。派生表与 CTE 没有不同的性能特征,只是语法稍不灵活。两者基本上都是内联视图。
-
在查看查询分析器的同时尝试运行 CTE 与派生表,您会发现性能上有很大差异。
-
不,没有。您认为您看到的任何性能差异都将归因于其他原因。例如参数嗅探。
标签: sql sql-server-2005 tsql