我正在将数据文件加载到一个完美正常的临时表中,但之后我需要为最终表转换为几种数据类型,并且insert语句对大表不可行。 这些陈述是由我的工具创建的,我想优化这部分。 插入语句看起来像这样,但有更多的列,有效性检查和这些转换中的一些必要的替换。
INSERT INTO foo
SELECT
convert(decimal(10,2),col1),
convert(date, col2),
convert(decimal(10,2),col3),
convert(int, col4),
convert(decimal(10,2),col5)
...
from foo_staging
在小桌子上,这种方法非常快,但随着桌子变大,性能变得非常糟糕。任何想法如何提高转换的性能?
编辑:我正在使用Bulkinsert进入临时表,文件非常大。
答案 0 :(得分:0)
一些敏捷的想法,因为这里没有人正确答案:
对于从表到表复制数据,最快的选择可能是使用表分区。这可能变得复杂,您需要阅读概念并确定它是否适用于您的数据。 (另外,您需要SQL Server企业版。)
另一种方法是将所复制的数据“chunkify”,将其分成(例如)10,000行或类似任意数量的数据,然后循环直到完成。这可以使用TOP N
语法完成,根据加载的数据计算日期或键范围,或者甚至可以使用row_number()
。
(再次注意,这些功能的可用性取决于您使用的SQL的版本/版本。)