SQL SERVER:如何使用联合运算符枚举 select 语句的行,但不重新开始计数、不重复和不选择子选择?可能吗?我需要有性能的东西。我用 subselect 和函数 ROW_NUMBER() 得到了它,但我需要更快的东西。任何想法?谢谢!
问问题
91 次
2 回答
2
这是我能想到的最快的:
select t.*, row_number() over (order by (select NULL)) as seqnum
from ((select * from A) union all
(select * from B)
) t;
两件事情。首先,这使用union all
而不是union
-- 因此不会删除重复项。如果不需要重复删除,这会加快查询速度。
其次,它使用order by (select NULL))
. 以我的经验,这似乎在输出上分配了一个序列号,而实际上并没有产生排序的开销。这完全基于我的经验。我还没有找到解释这一点的 SQL Server 文档。但是,我过去成功地使用过它。
于 2013-09-19T19:21:56.950 回答
1
如果你使用的是 SQL Server 2012+,你可以试试这个:
DECLARE @T TABLE (col1 INT, col2 INT);
INSERT INTO @T
VALUES (1, 2), (3, 4), (5, 6);
SELECT COUNT(*) OVER (
ORDER BY col1 ROWS UNBOUNDED PRECEDING
) RN, col1, col2
FROM @T
于 2013-09-19T19:26:05.470 回答