自从我做一些 SQL 以来已经有一段时间了,所以我得到了一些 SQL 来查看并尝试使用一个包含数百万行的表来提高效率。
我想将每100,000个sequenceid(不是行,所以row_number()没有被使用)选择到一个临时表中,目前它正在这样做,现在授予它大约需要15秒,但是有一个更高效、更快捷的方法?
declare @temp table(id int, date datetime)
declare @loop int, @max int, @min int
select @min = min(id) from tableA
select @max = max(id) from tableA
set @loop = @min + 100000
while (@loop < @max)
begin
insert into @temp
select id, date from tableA where id = @loop
set @loop = @loop + 100000
end
最佳答案
使用 Mod(%)
insert into @temp
select id, date from tableA
where
(id - @min) % 100000= 0 AND
id > @min -- to get the same logic as in your question
编辑:
根据您的情况计算 id 的所有值可能会更有效:
;WITH cte as
(
SELECT @min + 100000 id
UNION ALL
SELECT 100000+ id
FROM cte
WHERE id <= max(id) - 100000
)
INSERT @temp
SELECT id, date
FROM tableA a
JOIN
cte on cte.id = a.id
OPTION( MAXRECURSION 0)
关于sql-server - 选择 SQL 中的每第 n 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28323028/