2010-01-29 29 views
4

我需要在Oracle数据库中填充大量数据(很多小时加载)的表,并且我想知道哪个更快,在加载之前或加载之后在表上创建索引。我最初认为在索引表上插入会受到惩罚,但如果我使用完整表创建索引,则需要很长时间。哪个最好?在数据加载之前或之后创建Oracle SQL索引是否更好?

+0

你是否也考虑过INSERT/* + APPEND * /提示和可能的NOLOGGING? – PenFold 2010-01-29 16:41:31

回答

12

加载数据后创建索引要快得多。如果您将数据加载到包含索引的表中,则由于索引更新不变,加载速度将非常慢。如果您稍后创建索引,则只能有效地填充一次(这可能需要一些时间,但总计应该更小)。

类似的逻辑适用于约束。也可以稍后启用这些功能(除非您希望数据在约束条件下失败并且想尽早知道)。

+0

虽然这可能是Oracle SQL的情况,但您应该再次针对每个服务器提出此问题。例如,Sybase IQ首先创建索引的速度更快! – skimania 2011-05-03 23:11:30

2

您可能想要首先创建索引的唯一原因是强制执行唯一约束。否则,使用裸表的加载速度要快得多 - 无索引,无约束,未启用触发器。

1

在数据加载之后创建索引是批量加载的推荐做法。您必须确定传入的数据质量,特别是如果您使用唯一索引。索引的缺失意味着由于存在唯一索引而发生的数据验证不会发生。 您需要考虑的另一个问题是您是否有一次性负载操作或是否会成为常规事务?如果是常规事务,则可以在每次数据加载之前删除索引,并在成功加载后重新创建这些索引。

相关问题