【发布时间】:2015-09-20 21:48:17
【问题描述】:
我刚刚在 11gR2 上创建了一个新表,并在其中加载了没有索引的数据。加载完成后,我在新表上创建了几个索引,包括主约束。
CREATE TABLE xxxx (col1 varchar2(20), ...., coln varhcar2(10));
INSERT INTO xxxx SELECT * FROM another_table;
ALTER TABLE xxxx ADD CONSTRAINT xxxc PRIMARY KEY(col_list);
CREATE INDEX xxxx_idx1 ON xxxx (col3,col4);
此时我还需要使用 DBMS_STATS.GATHER_TABLE_STATS(v_owner,'XXXX') 来收集表统计信息吗? 如果是,为什么?因为 Oracle 在文档中说“Oracle 数据库现在会在索引创建和重建期间自动收集统计信息”。
我不想等待自动统计数据收集过夜,因为我需要在上述操作之后立即报告表的实际大小及其索引。我认为运行 DBMS_STATS.GATHER_TABLE_STATS 可能会给我更准确的使用数据。不过我可能是错的。
提前致谢,
【问题讨论】:
-
对于表的大小,您不需要任何统计信息。只需
select BYTES, SEGMENT_NAME from USER_SEGMENTS。