【发布时间】:2011-10-31 20:23:35
【问题描述】:
我见过两种改变主键的方法。方法1,是我删除主键(它也删除相应的索引)然后创建带有新索引的主键,即
alter table TABLE_NAME drop constraint PK_TABLE_NAME drop index;
alter table TABLE_NAME
add constraint PK_TABLE_NAME PRIMARY KEY ("COL1")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS" ENABLE;
COMMIT;
/
第二种方法是单独执行所有步骤,即
alter table TABLE_NAME drop constraint PK_TABLE_NAME;
drop index PK_TABLE_NAME;
CREATE UNIQUE INDEX PK_TABLE_NAME ON TABLE_NAME
(COL1)
LOGGING
TABLESPACE USERS
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
NOPARALLEL;
alter table TABLE_NAME add constraint PK_TABLE_NAME PRIMARY KEY ("COL1") USING INDEX PK_TABLE_NAME;
COMMIT;
/
所以现在我的问题是
- 除了步骤被拆分之外,这两种方法在后端有什么不同吗?
- 我看到我们可以用引号提及列名,即 "COL1" 或不带引号,即 COL1。这两种方法会有什么不同吗?
- 考虑到这些步骤是在一个拥有万亿数据的表上执行的,这些步骤中的任何一个对其他的有任何性能提升吗?
【问题讨论】: