oracle更新统计信息执行计划,为准确生成执行计划更新统计信息-analyze与dbms_stats...
如果我們想讓CBO利用合理利用數(shù)據(jù)的統(tǒng)計信息,正確判斷執(zhí)行任何SQL查詢時的最快途徑,需要及時的使用analyze命令或者dbms_stats重新統(tǒng)計數(shù)據(jù)的統(tǒng)計信息.
例如索引跳躍式掃描(INDEX SKIP SCAN)例子中,如果不對表EMPLOYEE 及索引收集一下統(tǒng)計信息,就不是INDEX SKIP SCAN策略了。
在oracle 8i以前,主要是用ANALYZE命令。在ORACLE 8I以后,又引入了DBMS_STATS存儲包來進行分析。幸運的是從ORACLE 10G以后,分析工作變成自動的了,這減輕的DBA的負擔
分析統(tǒng)計信息
analyze table 一般可以指定分析: 表,所有字段,所有索引字段,所有索引。 若不指定則全部都分析。
---table統(tǒng)計信息
analyzetable EMP compute statistics for table;---column統(tǒng)計信息
analyzetable EMP compute statistics for allcolumns;---索引統(tǒng)計信息
analyzetable EMP compute statistics for allindexes;---索引列統(tǒng)計信息
analyzetable EMP compute statistics for allindexed columns;---效果等于 analyze table tablename compute statistics for table for all indexes for all columns
analyzetable tablename compute statistics
查看統(tǒng)計信息
for table的統(tǒng)計信息存在于視圖:user_tables 、all_tables、dba_tables
for all indexes的統(tǒng)計信息存在于視圖: user_indexes 、all_indexes、dba_indexes
for all columns的統(tǒng)計信息存在于試圖:user_tab_columns、all_tab_columns、dba_tab_columns
SCOTT@PDBORCL> analyze table EMP compute statistics for table;
表已分析。
SCOTT@PDBORCL> analyze table EMP compute statistics for allcolumns;
表已分析。
SCOTT@PDBORCL> analyze table EMP compute statistics for allindexes;
表已分析。
SCOTT@PDBORCL> select table_name,num_rows from user_tables where table_name = 'EMP';
TABLE_NAME NUM_ROWS----------- -----------
EMP14SCOTT@PDBORCL> select index_name,uniqueness from user_indexes where table_name = 'EMP';
INDEX_NAME UNIQUENES-------- ---------
PK_EMPUNIQUESCOTT@PDBORCL> select column_name,data_type from user_tab_columns where table_name = 'EMP';
COLUMN_NAME DATA_TYPE-------------------------
EMPNONUMBERENAMEVARCHAR2JOBVARCHAR2MGRNUMBERHIREDATE DATE
SALNUMBERCOMMNUMBERDEPTNONUMBER已選擇8行。
SCOTT@PDBORCL> ^A
刪除統(tǒng)計信息
會刪除emp所有的statistics。
analyze table emp delete statistics
刪除只是某些列變?yōu)榭?#xff0c;如emp表的行數(shù)為空了
SCOTT@PDBORCL> analyze table emp compute statistics;
表已分析。
SCOTT@PDBORCL> select table_name,num_rows from user_tables where table_name = 'EMP';
TABLE_NAME NUM_ROWS-------- ----------
EMP14SCOTT@PDBORCL> analyze table emp delete statistics;
表已分析。
SCOTT@PDBORCL> select table_name,num_rows from user_tables where table_name = 'EMP';
TABLE_NAME NUM_ROWS-------- ----------
EMP
SCOTT@PDBORCL>
dbms_stats
dbms_stats能良好地估計統(tǒng)計數(shù)據(jù)(尤其是針對較大的分區(qū)表),并能獲得更好的統(tǒng)計結(jié)果,最終制定出速度更快的SQL執(zhí)行計劃。
語法:
dbms_stats.gather_table_stats (
ownname varchar2, tabname varchar2, partname varchar2, estimate_percent number, block_sample boolean, method_opt varchar2, degree number, granularity varchar2, cascadeboolean, stattab varchar2, statid varchar2, statown varchar2, no_invalidate boolean, force boolean );
dbms_stats.delete_table_stats 用于刪除統(tǒng)計信息。
例子:
------刪除統(tǒng)計信息SCOTT@PDBORCL> exec dbms_stats.delete_table_stats (ownname => 'scott',tabname => 'emp');
PL/SQL 過程已成功完成。----查詢統(tǒng)計信息
SCOTT@PDBORCL> select table_name,num_rows from user_tables where table_name = 'EMP';
TABLE_NAME NUM_ROWS-------- ----------
EMP---獲取統(tǒng)計信息SCOTT@PDBORCL> exec dbms_stats.gather_table_stats (ownname => 'scott',tabname => 'emp');
PL/SQL 過程已成功完成。---重新查新統(tǒng)計信息
SCOTT@PDBORCL> select table_name,num_rows from user_tables where table_name = 'EMP';
TABLE_NAME NUM_ROWS-------- ----------
EMP 14SCOTT@PDBORCL>
參考:
總結(jié)
以上是生活随笔為你收集整理的oracle更新统计信息执行计划,为准确生成执行计划更新统计信息-analyze与dbms_stats...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 了解创业板,才能增加获利的机会
- 下一篇: 盛京银行和恒大什么关系 恒大是盛京银行的