• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

更新Oracle表的统计信息 GATHER_TABLE_STATS

mysql 搞代码 4年前 (2022-01-09) 84次浏览 已收录 0个评论

更新Oracle表的统计信息 GATHER_TABLE_STATS

需要用到dbms_stats这个包的GATHER_TABLE_STATS过程,其中拥有者和表名必须填。

PROCEDURE GATHER_TABLE_STATS
Argument NameTypeIn/Out Default?
—————————— ———————– —— ——–
OWNNAMEVARCHAR2IN
TABNAMEVARCHAR2IN
PARTNAMEVARCHAR2INDEFAULT
ESTIMATE_PERCENTNUMBERINDEFAULT
BLOCK_SAMPLEBOOLEANINDEFAULT
METHOD_OPTVARCHAR2INDEFAULT
DEGREENUMBERINDEFAULT
GRANULARITYVARCHAR2INDEFAULT
CASCADEBOOLEANINDEFAULT
STATTABVARCHAR2INDEFAULT
STATIDVARCHAR2INDEFAULT
STA本文来源gaodai#ma#com搞*!代#%^码$网!TOWNVARCHAR2INDEFAULT
NO_INVALIDATEBOOLEANINDEFAULT
STATTYPEVARCHAR2INDEFAULT
FORCEBOOLEANINDEFAULT

exec dbms_stats.gather_table_stats(‘SCOTT’,’D’);

表的统计信息不是实时取的。所以有时候刚刚delete掉表中数据,并不能实时从user_tables中的num_rows反应出来。这时候收集下表的统计信息即可。

SQL> select table_name ,num_rows from user_tables where table_name=’D’;

TABLE_NAME NUM_ROWS
————— ———-
D4

SQL> select * from d;

DEPTNO DNAME
———- —————————-
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS

SQL> delete from d where deptno=30;

1 row deleted.

SQL> commit;

Commit complete.

SQL> select * from d;

DEPTNO DNAME
———- —————————-
10 ACCOUNTING
20 RESEARCH
40 OPERATIONS

SQL> select table_name ,num_rows from user_tables where table_name=’D’;

TABLE_NAME NUM_ROWS
————— ———-
D4

这时候行数还是4。我们收集下统计信息。

SQL> exec dbms_stats.gather_table_stats(‘SCOTT’,’D’);

PL/SQL procedure successfully completed.

SQL> select table_name ,num_rows from user_tables where table_name=’D’;

TABLE_NAME NUM_ROWS
————— ———-
D3

==============================================================================================

还原刚才删掉的数据……

SQL> alter session set nls_date_format =’yyyy-mm-dd hh24:mi:ss’;

Session altered.

SQL> SQL>
SQL> select sysdate from dual;

SYSDATE
——————-
2012-02-28 05:01:49

SQL> select * from d as of timestamp to_timestamp(‘2012-02-28 04:50:00′,’yyyy-mm-dd hh24:mi:ss’) where deptno=30;

DEPTNO DNAME
———- —————————-
30 SALES

SQL> insert into d select * from d as of timestamp to_timestamp(‘2012-02-28 04:50:00′,’yyyy-mm-dd hh24:mi:ss’) where deptno=30;

1 row created.

SQL> select * from d;

DEPTNO DNAME
———- —————————-
10 ACCOUNTING
20 RESEARCH
40 OPERATIONS
30 SALES

SQL> commit;

Commit complete.


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:更新Oracle表的统计信息 GATHER_TABLE_STATS

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址