【问题标题】:Oracle create index not in temp tablespaceOracle在临时表空间中创建索引
【发布时间】:2013-05-27 12:31:41
【问题描述】:

我有一张很棒的桌子,有超过 2.000.000.000 行。因此我想在 column1 上创建一个索引:

CREATE INDEX "SCHEMA"."INDEX_TABLE1" ON "SCHEMA"."TABLE1" ("STR1") 
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS NOCOMPRESS LOGGING
STORAGE( INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ;

如果我执行此操作,我的临时表空间将被使用,如果它已满(最大 20gb),则创建将被中止。

我创建索引的错在哪里?

【问题讨论】:

  • 您是否考虑过对该表进行分区?这样,当您用作分区键的列位于 where 子句中时,您将立即受益于分区修剪。此外,您可以使用本地索引,当与分区修剪结合使用时,这些索引将使用更少的空间并且速度更快。
  • 增加临时表空间可能是您唯一的选择。对大量数据进行排序需要大量磁盘空间。一种可能的例外情况是,如果表刚刚加载,并且您知道数据已经有序,则可以使用 NOSORT 选项创建索引。
  • 感谢您的回答。我以后会试试的

标签: oracle oracle11g database-indexes tablespace


【解决方案1】:

来自 Oracle 文档:

创建大型索引

创建超大索引时,请考虑使用以下过程为索引创建分配更大的临时表空间:

使用 CREATE TABLESPACE 或 CREATE TEMPORARY TABLESPACE 语句创建一个新的临时表空间。

使用 ALTER USER 语句的 TEMPORARY TABLESPACE 选项将此作为您的新临时表空间。

使用 CREATE INDEX 语句创建索引。

使用 DROP TABLESPACE 语句删除这个表空间。然后使用 ALTER USER 语句将临时表空间重置为原始临时表空间。

使用此过程可以避免将您通常共享的临时表空间扩展到可能影响未来性能的不合理大尺寸的问题。

【讨论】:

    猜你喜欢
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 2019-12-07
    • 2011-03-05
    • 2015-12-12
    • 2018-12-18
    • 1970-01-01
    相关资源
    最近更新 更多