【问题标题】:Create index on existing table Oracle在现有表 Oracle 上创建索引
【发布时间】:2011-10-23 23:11:06
【问题描述】:

在 oracle 中的现有表上创建索引是否安全?

像这样:

CREATE INDEX table_sample_ix03
      ON table_sample
(
  col4,
  col22
)
TABLESPACE data
STORAGE
(
  INITIAL        10M    NEXT          2M
  MINEXTENTS      1     MAXEXTENTS  100
  PCTINCREASE     0
)
;

【问题讨论】:

    标签: oracle indexing


    【解决方案1】:

    在对表运行 DML 查询时创建索引时,建议使用 ONLINE 子句。见http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_5010.htm

    例子:

    CREATE  INDEX "MYINDEX" ON "MYTABLE" ("MYCOLUMN")  ONLINE;
    

    【讨论】:

    • 来自您的链接:“指定 ONLINE 以指示在创建索引期间将允许对表进行数据操作语言 (DML) 操作。” Create 是数据定义语言(DDL)操作和在线索引构建有限制。
    • 没有引号和空格......!创建索引 ix_customernumber ON lp_temp_deactMobiel(customernumber) ONLINE;
    • 最好在现有表上创建索引,并将 'PARALLEL' 子句设置为某个值,以便在海量数据上更快地创建索引。稍后您可以更改索引并设置“NO PARALLEL”。在我们的遗留项目中,我们遵循这种方法。
    【解决方案2】:

    是的。但是如果可能的话,你应该在没有人更新表的情况下这样做,因为他们会在性能方面受到影响(无论如何这样做仍然是安全的,不会有数据损坏)。

    【讨论】:

      【解决方案3】:

      是的。为什么不呢?

      我只能在发出命令后才想到可能的性能问题。如果表很大,索引可能需要一些时间,但除此之外,应该没问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-24
        • 2020-06-02
        • 1970-01-01
        • 2013-10-24
        • 2020-10-15
        • 2011-07-24
        • 2020-07-07
        • 2013-11-27
        相关资源
        最近更新 更多