从另一个表中插入数百万行数据

3

如何更快地从select语句中插入行到表中并进行插入操作?

Insert into PartyMain
Select [PermID]
      ,[IsOptOut]
      ,[UpdatedOn]
      ,[FK_DataSource]
 From PartyMain

有600万行的数据需要处理,花费时间超过4分钟。


处理600万行数据大约需要4分钟时间,速度大约为每秒20,000行。您原本期望的处理时间是多久呢?请问您的I/O子系统的最大理论吞吐量是多少? - Mitch Wheat
每秒25,000次插入,你确定它这么慢吗?可能在这里起作用的是数据库的调整参数,例如它分配区段的方式、建立索引、负载因子等。 - entonio
我同意米奇的看法,这听起来并不太糟糕。最好先看看这是否真的有必要。你想要实现什么目标? - David Steele
1
谢谢,情况还不错,但我想知道是否有一些“神奇”的技巧可以提高插入性能。我需要插入数十亿条记录,以这个速度1B = 11+小时,我想知道我能做什么来提高加载时间。 - Marty Trenouth
2个回答

1

通过选择插入是我能想到的最快的插入数据的方法。你可能可以改进你的应用程序工作流程。

我想象一下在应用程序中有某种按钮来启动这个过程。而不是在用户告诉应用程序时进行插入(我做出了这个假设),你能否有一个每X秒运行一次的进程来进行传输?或者每隔X秒检查一次,如果要传输的行数大于Y,则运行传输...换句话说,不要等到有600万行。

编辑-另一个选项可能是数据库触发器


0

你在PartyMain上有任何索引吗?如果有,你可能想要:

  1. 删除索引
  2. 插入行
  3. 重新创建索引

这可能会提高性能。

另外,你确定你正在从PartyMain读取并插入到PartyMain吗?


好主意!我会尝试一下,看看是否有所改进。 - Marty Trenouth
@Marty - 太好了!我期待着看看这是否对你有用。 - YetAnotherUser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接