在数据加载之前或之后创建Oracle SQL索引更好吗?

时间:2010-01-29 08:37:16

标签: database oracle indexing

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

3 个答案:

答案 0 :(得分:12)

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

类似的逻辑适用于约束。也可以在以后启用它们(除非您希望数据不能通过约束并希望尽早知道)。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

数据加载后创建索引是批量加载的推荐做法。您必须确定传入的数据质量,尤其是在使用唯一索引时。缺少索引意味着不会发生由于存在唯一索引而发生的数据验证。 您要考虑的另一个问题是您是否进行了一次性加载操作,还是常规事务?如果它是常规事务,那么您可以在每次加载数据之前删除索引,并在成功加载后重新创建它们。