Sql 将数据插入带有索引的大型表中

Sql 将数据插入带有索引的大型表中,sql,oracle,Sql,Oracle,我需要插入数据,数据量非常大。我需要在这个表上定义一些索引。所以,我的问题是…哪一个更好,为什么 创建表-->插入数据-->创建索引 或者,创建表-->创建索引-->插入数据 Thnx, Vabs选择#1会更快,因为从头开始建立索引比逐个添加记录更有效。这也是因为记录将预先排序,索引块将按顺序填充和写入。在oracle中,您还可以使用“创建索引…”。。。nologging`避免创建重做日志。choice#1将更快,因为从头开始创建索引比逐个添加记录更有效。这也是因为记录将预先排序,索引块将按顺序

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

  • 创建表-->插入数据-->创建索引
  • 或者,创建表-->创建索引-->插入数据
  • Thnx,
    Vabs

    选择#1会更快,因为从头开始建立索引比逐个添加记录更有效。这也是因为记录将预先排序,索引块将按顺序填充和写入。在oracle中,您还可以使用“创建索引…”。。。nologging`避免创建重做日志。

    choice#1将更快,因为从头开始创建索引比逐个添加记录更有效。这也是因为记录将预先排序,索引块将按顺序填充和写入。在oracle中,您还可以使用“创建索引…”。。。nologging`避免创建重做日志。

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

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


    因此,加载数据然后构建索引要快得多。当您构建索引时,oracle可以在其临时排序空间中对整个表进行排序,然后在此基础上构建索引

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

    因此,加载数据然后构建索引要快得多。Choice#1通常会更快,但在有些情况下,Choice#2可能会更快,即,有多个插入,一个或多个后续插入查询同一个表并使用一个或多个索引

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

    Choice#1通常会更快,但在有些情况下,Choice#2可能会更快-即有多个插入,一个或多个后续插入查询同一个表并使用一个或多个索引


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

    的可能重复,这也解释了为什么…的可能重复,这也解释了为什么…@Magnus:因为索引只会维护一次。如果在所有insert过程中都存在索引,则每个insert语句都需要更新索引。与每次插入一行时更新索引相比,为所有行“一次性”创建索引的开销更小。@Magnus:因为索引只会维护一次。如果在所有insert过程中都存在索引,则每个insert语句都需要更新索引。与每次插入一行时更新索引相比,为所有行“一次性”创建索引的开销更小。