Oracle Optimizer: Moving to and working with CBO - Part 4 - Page 4October 28, 2003 9.4.2) Deleting statistics with DBMS_STATSDBMS_STATS.DELETE_TABLE_STATS DBMS_STATS.DELETE_TABLE_STATS deletes table statistics. Call Syntax dbms_stats.delete_table_stats (ownname, tabname, partname, stattab, statid, cascade_parts, cascade_columns, cascade_indexes, statown);
e.g.: Delete statistics for a table and its columns and indexes. orAP>exec dbms_stats.delete_table_stats(ownname => 'APPS', tabname => 'AM21'); PL/SQL procedure successfully completed. e.g.: Delete statistics for table only. Column and index statistics will be preserved. orAP>exec dbms_stats.delete_table_stats(ownname => 'APPS', tabname => 'AM21', - > cascade_columns => false, cascade_indexes => false); PL/SQL procedure successfully completed. DBMS_STATS.DELETE_COLUMN_STATS DBMS_STATS.DELETE_COLUMN_STATS deletes individual column statistics. Call Syntax dbms_stats.delete_column_stats(ownname, tabname, colname, partname, stattab, statid, cascade_parts, statown); e.g.: Deleting statistics for one column. orAP>exec dbms_stats.delete_column_stats(ownname => 'APPS', tabname => 'AM21', - > colname => 'DESCRIPTION'); PL/SQL procedure successfully completed. DBMS_STATS.DELETE_INDEX_STATS DBMS_STATS.DELETE_INDEX_STATS deletes individual index statistics. Call Syntax dbms_stats.delete_index_stats(ownname, indname, partname, stattab, statid, cascade_parts, statown); e.g.: Deleting index statistics. orAP>exec dbms_stats.delete_index_stats(ownname => 'APPS', indname => 'AM21_N1'); PL/SQL procedure successfully completed. DBMS_STATS.DELETE_SCHEMA_STATS DBMS_STATS.DELETE_SCHEMA_STATS deletes the complete schema statistics. Call Syntax dbms_stats.delete_schema_stats(ownname, stattab, statid, statown); e.g.: Deleting statistics for schema FA. SQL> exec dbms_stats.delete_schema_stats('FA');
PL/SQL procedure successfully completed.
DBMS_STATS.DELETE_DATABASE_STATS DBMS_STATS.DELETE_DATABASE_STATS deletes the complete database statistics. Call Syntax dbms_stats.delete_database_stats(stattab, statid, statown); 9.4.3) Providing user statistics with DBMS_STATSDBMS_STATS.SET_TABLE_STATS Use this routine to set your own statistics in the dictionary instead of the RDBMS statistics. Call Syntax dbms_stats.set_table_stats(ownname, tabname, partname, stattab, statid, numrows, numblks, avgrlen, flags, statown);
e.g.: SQL> exec dbms_stats.set_table_stats(ownname => 'JASHAN', tabname => 'TMP_CKFA', - > numrows => 12422, numblks => 100, avgrlen => 124); PL/SQL procedure successfully completed. jaJA>select owner, num_rows, blocks, avg_row_len 2 from dba_tables 3 where table_name = 'TMP_CKFA'; OWNER | NUM_ROWS| BLOCKS|AVG_ROW_LEN ____________________|__________|__________|___________ JASHAN | 12422| 100| 124 DBMS_STATS.SET_COLUMN_STATS DBMS_STATS.SET_COLUMN_STATS sets column statistics explicitly. Call Syntax dbms_stats.set_column_stats(ownname, tabname, colname, partname, stattab, statid, distcnt, density, nullcnt, srec, avgclen, flags, statown);
e.g.: Setting statistics for one column of a table. jaJA>exec dbms_stats.set_column_stats(ownname => 'JASHAN', tabname => 'TMP_CKFA', - > colname => 'CODE', distcnt => 1000, density => 5, nullcnt => 0, avgclen => 12); PL/SQL procedure successfully completed. SQL> select column_name, num_distinct, low_value, high_value, density, 2 num_nulls, num_buckets, avg_col_len 3 from dba_tab_columns 4* where table_name = 'TMP_CKFA' and column_name = 'CODE' COLUMN_NAME|NUM_DISTINCT|LOW_VA|HIGH_VA|DENSITY| NUM_NULLS|NUM_BUCKETS|AVG_COL_LEN ___________|____________|______|_______|_______|__________|___________|___________ CODE | 1000| | | 5| 0| 1| 12 DBMS_STATS.SET_INDEX_STATS Set index statistics. Call Syntax dbms_stats.set_index_stats(ownname, indname, partname, stattab, statid, numrows, numlblks, numdist, avglblk, avgdblk, clstfct, indlevel, flags, statown);
e.g.: jaJA>exec dbms_stats.set_index_stats(ownname => 'JASHAN', indname => 'TMP_CKFA_N1', -
> numrows => 1000, numlblks => 100, numdist => 100, avglblk => 1, avgdblk => 12, -
> clstfct => 1000, indlevel => 2);
PL/SQL procedure successfully completed.
jaJA>select num_rows, blevel, leaf_blocks, avg_leaf_blocks_per_key,
2 avg_data_blocks_per_key, clustering_factor, user_stats
3 from dba_indexes
4 where index_name = 'TMP_CKFA_N1';
NUM_ROWS|BLEVEL|LEAF_BLOCKS|AVG_LEAF_B|AVG_DATA_B|CLUSTERING_F|USE
________|______|___________|__________|__________|____________|___
1000| 2| 100| 1| 12| 1000|YES
|