【发布时间】:2010-03-25 19:38:37
【问题描述】:
我在使用索引组织表时遇到了一个奇怪的问题。我正在运行 Oracle 11g 标准。
我有一个表 src_table
SQL> desc src_table;
Name Null? Type
--------------- -------- ----------------------------
ID NOT NULL NUMBER(16)
HASH NOT NULL NUMBER(3)
........
SQL> select count(*) from src_table;
COUNT(*)
----------
21108244
现在让我们创建另一个表并从 src_table 复制 2 列
set timing on
SQL> create table dest_table(id number(16), hash number(20), type number(1));
Table created.
Elapsed: 00:00:00.01
SQL> insert /*+ APPEND */ into dest_table (id,hash,type) select id, hash, 1 from src_table;
21108244 rows created.
Elapsed: 00:00:15.25
SQL> ALTER TABLE dest_table ADD ( CONSTRAINT dest_table_pk PRIMARY KEY (HASH, id, TYPE));
Table altered.
Elapsed: 00:01:17.35
Oracle
现在相同的练习,但使用 IOT 表
SQL> CREATE TABLE dest_table_iot (
id NUMBER(16) NOT NULL,
hash NUMBER(20) NOT NULL,
type NUMBER(1) NOT NULL,
CONSTRAINT dest_table_iot_PK PRIMARY KEY (HASH, id, TYPE)
) ORGANIZATION INDEX;
Table created.
Elapsed: 00:00:00.03
SQL> INSERT /*+ APPEND */ INTO dest_table_iot (HASH,id,TYPE)
SELECT HASH, id, 1
FROM src_table;
“插入”到 IOT 需要 18 小时 !!!我已经在 win 和 linux 上运行的 2 个不同的 Oracle 实例上进行了尝试,得到了相同的结果。
这里发生了什么?为什么要花这么长时间?
【问题讨论】:
标签: oracle