时间:2021-07-01 10:21:17 帮助过:63人阅读
之前在10g下验证过使用参数skewonly收集直方图的缺陷,11g下已经修复。直方图在大数据量上显的越来越重要了,如果不准,执行计划很可能不准。 SQL select * from v$version;BANNER------------------------------------------------------------------------
之前在10g下验证过使用参数skewonly收集直方图的缺陷,11g下已经修复。直方图在大数据量上显的越来越重要了,如果不准,执行计划很可能不准。
SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production PL/SQL Release 11.2.0.1.0 - Production CORE 11.2.0.1.0 Production TNS for Linux: Version 11.2.0.1.0 - Production NLSRTL Version 11.2.0.1.0 - Production SQL> drop table test purge; SQL> create table test ( id varchar2(60)【本文来自鸿网互联 (http://www.68idc.cn)】 primary key, name varchar2(100) ); SQL> insert into test select rpad('a', 40, 'a') || to_char(rownum), object_name from dba_objects; 已创建69617行。 SQL> commit; SQL> select count(1),count(distinct id),count(distinct name) from test; COUNT(1) COUNT(DISTINCTID) COUNT(DISTINCTNAME) ---------- ----------------- ------------------- 69617 69617 41622 SQL> exec dbms_stats.gather_table_stats(user,'test',METHOD_OPT=>'for all columns size skewonly'); SQL> select COLUMN_NAME, NUM_DISTINCT from user_tab_columns where TABLE_NAME = 'TEST'; COLUMN_NAME NUM_DISTINCT ------------------------------ ------------ ID 69617 NAME 40904 SQL> exec dbms_stats.gather_table_stats(user,'TEST',METHOD_OPT=>'for all columns size auto'); SQL> select COLUMN_NAME, NUM_DISTINCT from user_tab_columns where TABLE_NAME = 'TEST'; COLUMN_NAME NUM_DISTINCT ------------------------------ ------------ ID 69617 NAME 40904
可以看到两次收集的都是准的。