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