使用Indexes将数据插入到一个巨大的表中

时间:2011-04-27 10:27:40

标签: sql oracle

我需要插入数据,数据量非常大。我需要在此表上定义一些索引。所以,我的问题是......哪个更好,为什么

  1. 创建表格 - >插入数据 - >创建索引
  2. 或,创建表格 - >创建索引 - >插入数据
  3. 日Thnx, VABS

3 个答案:

答案 0 :(得分:4)

选择#1会更快,因为从头开始构建索引比从一个接一个地添加记录更有效。这也是因为记录将被预先排序并且索引块被填充并以有序的方式写入。在oracle中,您还可以使用'create index ... nologging'来避免创建重做日志。

答案 1 :(得分:2)

构建索引时,oracle可以在整个表的临时排序空间中对其进行排序,然后从中构建索引。

如果已经构建了索引,那么对于插入的每一行,它必须在索引中查找新值所在的位置,然后将该值添加到索引中。

因此,加载数据然后构建索引

要快得多

答案 2 :(得分:0)

选择#1 通常更快,但有时候选择#2会更快 - 即你有多个INSERT,一个或多个后续插入查询同一个表并使用一个或更多的索引。

当然,另一个考虑因素是,如果在加载数据之前/期间会有来自其他会话的并发活动 - 如果他们没有可以利用的索引,他们可能会受到影响。