提问人:frank 提问时间:11/16/2023 更新时间:11/16/2023 访问量:51
使用 while 循环将 SQL 表拆分为块 [已关闭]
split sql table into chunks using while loop [closed]
问:
我继承了一个 2T 行、1.4TB 的表,该表需要很长时间才能查询。
我想根据行标识符的值将其拆分为 20 * 100m 块表。
我可以写 20 次:
select *
into smallTable1
from bigTable
where rowID < 100 000 000
更改 and 范围,但是有没有办法用 或更优雅的东西来做到这一点?smallTable
rowID
while loop
答:
0赞
Tim Biegeleisen
11/16/2023
#1
您可以在此处应用 and 分区。例如,要查找第一个 100m 块,可以使用:ROW_NUMBER
rowID
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (ORDER BY rowID) rn
FROM bigTable
)
SELECT col1, col2, col3, ... -- list out all columns explicitly
INTO smallTable1
FROM cte
WHERE rn <= 100000000;
评论
0赞
Charlieface
11/16/2023
这将扫描整个表格。为什么不直接使用?TOP...ORDER BY
0赞
Tim Biegeleisen
11/16/2023
就目前而言,我的答案是合理的,因为我们不知道何时/多久需要每个块。此外,我怀疑这个要求是针对生产的,所以性能不是主要问题。
评论