【发布时间】:2011-04-27 10:27:40
【问题描述】:
我需要插入数据,数据量非常大。我需要在此表上定义一些索引。所以,我的问题是……哪个更好,为什么
- 创建表 --> 插入数据 --> 创建索引
- 或者,创建表-->创建索引-->插入数据
谢谢, 瓦布斯
【问题讨论】:
-
stackoverflow.com/q/1983979/257972 的可能重复项,这也解释了为什么...
我需要插入数据,数据量非常大。我需要在此表上定义一些索引。所以,我的问题是……哪个更好,为什么
谢谢, 瓦布斯
【问题讨论】:
选择 #1 会更快,因为从头开始构建索引比逐个添加记录更有效。这又是因为记录将被预先排序,并且索引块被填充并以有序的方式写入。在 oracle 中,您还可以使用“create index ... nologging”来避免创建重做日志。
【讨论】:
当你建立一个索引时,oracle 可以在它的临时排序空间中对整个表进行排序,然后从中构建索引。
如果您已经建立了索引,那么对于插入的每一行,它必须在索引中查找新值所在的位置,然后将值添加到索引中。
所以加载数据然后构建索引要快得多
【讨论】:
选择 #1通常会更快,但在某些情况下选择 #2 可能会更快 - 即您有多个 INSERT,并且一个或多个后续插入查询同一个表并使用一个或更多索引。
当然,另一个考虑因素是在加载数据之前/期间是否会有来自其他会话的并发活动 - 如果它们没有索引可以利用,它们可能会受到影响。
【讨论】: