觀察analyze table compute statistics 都對什麼物件統計了資訊 - 轉
analyze table compute statistics = analyze table compute statistics for table for all indexes for all columns;
比analyze table compute statistics for table for all indexes for all indexed columns 分析了更多的資訊
但這裡並不是鼓勵使用 analyze table 的方法進行分析。
SQL> create table t as select * from all_objects;
Table created.
SQL> create index t_idx on t(object_id);
Index created.
SQL> analyze table t compute statistics for table
2 for all indexes for all indexed columns;
Table analyzed.
SQL> select t.num_rows, i.num_rows, c.cnt
2 from (select num_rows from user_tables where table_name = 'T') t,
3 (select num_rows from user_indexes where table_name = 'T' ) i,
4 (select count(distinct column_name) cnt from user_tab_histograms where tab
le_name = 'T' ) c
5 /
NUM_ROWS NUM_ROWS CNT
---------- ---------- ----------
31213 31213 1 《------在這裡 因為只有1列建立有索引,因此user_tab_histograms 只統計了object_id列的資料分佈,這裡object_id因為唯一,所以是均勻分佈的
SQL> analyze table t delete statistics;
Table analyzed.
[@more@]觀察analyze table
SQL> select t.num_rows, i.num_rows, c.cnt
2 from (select num_rows from user_tables where table_name = 'T') t,
3 (select num_rows from user_indexes where table_name = 'T' ) i,
4 (select count(distinct column_name) cnt from user_tab_histograms where ta
ble_name = 'T' ) c;
NUM_ROWS NUM_ROWS CNT
---------- ---------- ----------
0
SQL> analyze table t compute statistics;
Table analyzed.
SQL> select t.num_rows, i.num_rows, c.cnt
2 from (select num_rows from user_tables where table_name = 'T') t,
3 (select num_rows from user_indexes where table_name = 'T' ) i,
4 (select count(distinct column_name) cnt from user_tab_histograms where ta
ble_name = 'T' ) c;
NUM_ROWS NUM_ROWS CNT
---------- ---------- ----------
31213 31213 13 〈------統計了所有的列,但這些列並不是都用在 where col='X' 上的,因此很多資訊其實都沒有實際意義。
DBMS_STATS 和TABLE的MONITOR結合,可以當表資料量發生10%的變化的時候,自動重新收集統計資訊。
我平常更喜歡使用SIZE SKEWONLY 分析histograms
==========================================================================
analyze table t compute statistics = analyze table t compute statistics for table for all indexes for all columns
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
當analyze table t delete statistics 會刪除所有的statistics
===========================================================================[Q]怎麼樣分析表或索引
[A]命令列方式可以採用analyze命令
如Analyze table tablename compute statistics;
Analyze index|cluster indexname estimate statistics;
ANALYZE TABLE tablename COMPUTE STATISTICS
FOR TABLE
FOR ALL [LOCAL] INDEXES
FOR ALL [INDEXED] COLUMNS;
ANALYZE TABLE tablename DELETE STATISTICS
ANALYZE TABLE tablename VALIDATE REF UPDATE
ANALYZE TABLE tablename VALIDATE STRUCTURE
[CASCADE]|[INTO TableName]
ANALYZE TABLE tablename LIST CHAINED ROWS [INTO TableName]
等等。
如果想分析整個使用者或資料庫,還可以採用工具包,可以並行分析
Dbms_utility(8i以前的工具包)
Dbms_stats(8i以後提供的工具包)
如
dbms_stats.gather_schema_stats(User,estimate_percent=>100,cascade=> TRUE);
dbms_stats.gather_table_stats(User,TableName,degree => 4,cascade => true);
這是對命令與工具包的一些總結
1、對於分割槽表,建議使用DBMS_STATS,而不是使用Analyze語句。
a) 可以並行進行,對多個使用者,多個Table
b) 可以得到整個分割槽表的資料和單個分割槽的資料。
c) 可以在不同級別上Compute Statistics:單個分割槽,子分割槽,全表,所有分割槽
d) 可以倒出統計資訊
e) 可以使用者自動收集統計資訊
2、DBMS_STATS的缺點
a) 不能Validate Structure
b) 不能收集CHAINED ROWS, 不能收集CLUSTER TABLE的資訊,這兩個仍舊需要使用Analyze語句。
c) DBMS_STATS 預設不對索引進行Analyze,因為預設Cascade是False,需要手工指定為True
3、對於oracle 9裡面的External Table,Analyze不能使用,只能使用DBMS_STATS來收集資訊。
==================================================================
轉:http://bianxq.javaeye.com/blog/464679
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/789833/viewspace-1039979/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- alter index compute statistics與analyze index的比較Index
- MySQL 5.7 ANALYZE TABLE分析索引的統計資訊MySql索引
- analyze index 時validate structure和compute statistics的區別IndexStruct
- 監視stale statistics(失真的統計資訊)的物件!物件
- Oracle中的分析統計validate structure,compute statisticsOracleStruct
- Analyze table對Oracle效能的提升Oracle
- [轉] oracle統計資訊(statistics)和直方圖(histogram)Oracle直方圖Histogram
- Fixed Objects Statistics統計資訊收集 - 2Object
- analyze index 時validate structure和compute statistiIndexStruct
- 【轉】dbms_stats.gather_table_stats與analyze table 的區別
- 資料庫效能調優之始: analyze統計資訊資料庫
- dbms_stats.gather_table_stats與analyze table 的區別[轉貼]
- 為什麼都放棄了LangChain?LangChain
- MySQL:Analyze table導致'waiting for table flush'MySqlAI
- Oracle analyze table的使用總結Oracle
- oracle dbms_stat與analyze 獲取有效的統計資訊(5)Oracle
- oracle dbms_stat與analyze 獲取有效的統計資訊(4)Oracle
- oracle dbms_stat與analyze 獲取有效的統計資訊(3)Oracle
- oracle dbms_stat與analyze 獲取有效的統計資訊(2)Oracle
- oracle dbms_stat與analyze 獲取有效的統計資訊(1)Oracle
- oracle dbms_stat與analyze 獲取有效的統計資訊(6)Oracle
- analyze table 的各種語法及對應工作機制
- Oracle 11g新特性:多列統計資訊(MultiColumn Statistics)Oracle
- 我學習的程式設計,都給我帶來了什麼?程式設計
- 程式設計師什麼都會程式設計師
- 那些學了 Python 的程式設計師,程式設計能力都“退化”成什麼樣了?Python程式設計師
- 圖靈數學統計學系列裡面有很多好書,可是為什麼都絕版了?圖靈
- 你的JavaScript程式碼都經歷了什麼JavaScript
- 分析型CRM系統都分析什麼?
- 程式設計師都幹些什麼?程式設計師
- 深入分割槽表的增量統計資訊收集技術(incremetal statistics collection)REM
- Deferred statistics publish-延遲統計資訊釋出功能介紹
- 學Python的程式設計師,程式設計能力都“退化”成什麼樣了?Python程式設計師
- 2018年,JavaScript都經歷了什麼?JavaScript
- 人人都會設計模式—觀察者模式–Observer設計模式Server
- 人人都會設計模式---觀察者模式--Observer設計模式Server
- SciTech-Statistics-英語授課:Business Statistics商務統計
- oracle 建立或重建索引時收集統計資訊不自動收集(_optimizer_compute_index_stats)Oracle索引Index