INSERT INTO [LinkedServerName].[AdventureWorks2012].[dbo].[TestInsert] (
[uid]
, test1
, test2
, test3
)
SELECT
ROW_NUMBER() OVER(ORDER BY y.a, y.b, y.c, y.d, y.e, y.f, y.g) as [uid]
, 1 as test1
, 2000000 as test2
, 30000 as test3
FROM (
SELECT *
FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) as tens(a)
, (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) as hundreds(b)
, (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) as thousands(c)
, (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) as tenthousands(d)
, (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) as hundredthousands(e)
, (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) as millions(f)
, (VALUES (0),(1),(2)) as m3(g) --times 3 = 3 million records.
) as y
1条答案
按热度按时间mkshixfv1#
我的网络上运行着2台MSSQL 2012服务器。我在AdvetureWorks 2012数据库中的“报告”服务器上创建了一个测试表。然后,我在主生产服务器上创建了一个查询,该查询生成了300万行并将它们插入到报告服务器表中。仅创建300万条记录的select语句就需要14秒的时间。下面的脚本插入了大约1。11分钟记录800万条。
这两台服务器都是运行4核(3 GHz)和64 GB RAM的虚拟机。源/生产服务器运行的是IOPS约为1400的HDD。目标/报告服务器运行的是未经基准测试的SSD。
下面是我在源服务器上使用的脚本:
这不是一个快速的过程,而且我推送的数据是微不足道的(4个整数)。正如其他帖子(here,here,here)所讨论的,最快的选择是使用某种脚本在源端生成一个.csv文件,然后让目标服务器导入该文件。或者,具有讽刺意味的是,使用SSIS包。