在空表上创建索引后插入数据或在oracle上插入数据后创建唯一索引?

时间:2009-12-31 04:49:40

标签: sql performance oracle insert indexing

哪个选项更好更快?  在空表上创建索引或在插入数据后创建唯一索引后插入数据。我有大约10M行要插入。哪个选项会更好,以便我可以减少停机时间。

3 个答案:

答案 0 :(得分:19)

先插入数据,然后创建索引。

每次执行UPDATE,INSERT或DELETE操作时,表中的所有索引也必须更新。因此,如果首先创建索引,然后插入10M行,则索引也必须更新10M次(除非您正在进行批量操作)。

答案 1 :(得分:6)

插入记录然后在导入行后创建索引会更快更好。它更快,因为您插入行时没有索引维护的开销,而且从索引的碎片角度来看,它更好。

显然,对于唯一索引,请确保要导入的数据是唯一的,这样在尝试创建索引时就不会出现故障。

答案 2 :(得分:2)

正如其他人所说,先插入并稍后添加索引。如果表已经存在并且您必须插入一堆这样的数据,则删除所有索引和约束,插入数据,然后首先重新应用索引,然后重新应用约束。您当然希望进行中间提交,以帮助排除您用完回滚段空间或类似情况的可能性。如果您要插入这么多数据,那么查看使用SQL * Loader来节省时间和加重可能会很有用。

我希望这会有所帮助。