zoukankan      html  css  js  c++  java
  • 搜集直方图

    SQL> drop table test purge;
    
    Table dropped.
    
    SQL> create table test as select * from dba_objects;
    
    Table created.
    
    
    SQL> select a.column_name,
           b.num_rows,
           a.num_distinct Cardinality,
           round(a.num_distinct / b.num_rows * 100, 2) selectivity,
           a.histogram,
           a.num_buckets
      from dba_tab_col_statistics a, dba_tables b
     where a.owner = b.owner
       and a.table_name = b.table_name
       and a.owner = 'TEST'
       and a.table_name = 'TEST';
      2    3    4    5    6    7    8    9   10   11  
    no rows selected
    
    此时没有直方图的信息
    
    BEGIN
      DBMS_STATS.GATHER_TABLE_STATS(ownname          => 'TEST',
                                    tabname          => 'TEST',
                                    estimate_percent => 100,
                                    method_opt       => 'for all columns size skewonly',
                                    no_invalidate    => FALSE,
                                    degree           => 8,
                                    cascade          => TRUE);
    END;
    
    method_opt       => 'for all columns size skewonly'---这种方式基本上对所有的列都搜集了直方图信息
    
    SQL> select a.column_name,
           b.num_rows,
           a.num_distinct Cardinality,
           round(a.num_distinct / b.num_rows * 100, 2) selectivity,
           a.histogram,
           a.num_buckets
      from dba_tab_col_statistics a, dba_tables b
     where a.owner = b.owner
       and a.table_name = b.table_name
       and a.owner = 'TEST'
       and a.table_name = 'TEST';  2    3    4    5    6    7    8    9   10   11  
    
    COLUMN_NAME			 NUM_ROWS CARDINALITY SELECTIVITY HISTOGRAM	  NUM_BUCKETS
    ------------------------------ ---------- ----------- ----------- --------------- -----------
    OWNER				    72530	   30	      .04 FREQUENCY		   30
    OBJECT_NAME			    72530	44279	    61.05 HEIGHT BALANCED	  254
    SUBOBJECT_NAME			    72530	  114	      .16 FREQUENCY		  114
    OBJECT_ID			    72530	72530	      100 NONE			    1
    DATA_OBJECT_ID			    72530	 7687	     10.6 HEIGHT BALANCED	  254
    OBJECT_TYPE			    72530	   44	      .06 FREQUENCY		   44
    CREATED 			    72530	 1093	     1.51 HEIGHT BALANCED	  254
    LAST_DDL_TIME			    72530	 1143	     1.58 HEIGHT BALANCED	  254
    TIMESTAMP			    72530	 1214	     1.67 HEIGHT BALANCED	  254
    STATUS				    72530	    2		0 FREQUENCY		    2
    TEMPORARY			    72530	    2		0 FREQUENCY		    2
    
    COLUMN_NAME			 NUM_ROWS CARDINALITY SELECTIVITY HISTOGRAM	  NUM_BUCKETS
    ------------------------------ ---------- ----------- ----------- --------------- -----------
    GENERATED			    72530	    2		0 FREQUENCY		    2
    SECONDARY			    72530	    2		0 FREQUENCY		    2
    NAMESPACE			    72530	   21	      .03 FREQUENCY		   21
    EDITION_NAME			    72530	    0		0 NONE			    0
    
    15 rows selected.
    
    可以看到基本上对所有列都搜集了直方图信息
    
    SQL> drop table test purge;
    
    Table dropped.
    
    SQL>  create table test as select * from dba_objects;
    
    Table created.
    
    ---------------------------------------------------------------------------------------------------------
    SQL> BEGIN
      DBMS_STATS.GATHER_TABLE_STATS(ownname          => 'TEST',
                                    tabname          => 'TEST',
                                    estimate_percent => 100,
                                    method_opt       => 'for all columns size auto',
                                    no_invalidate    => FALSE,
                                    degree           => 8,
                                    cascade          => TRUE);
    END;  2    3    4    5    6    7    8    9  
     10  /
    
    PL/SQL procedure successfully completed.
    
    SQL> select a.column_name,
           b.num_rows,
           a.num_distinct Cardinality,
           round(a.num_distinct / b.num_rows * 100, 2) selectivity,
           a.histogram,
           a.num_buckets
      from dba_tab_col_statistics a, dba_tables b
     where a.owner = b.owner
       and a.table_name = b.table_name
       and a.owner = 'TEST'
       and a.table_name = 'TEST';  2    3    4    5    6    7    8    9   10   11  
    
    COLUMN_NAME			 NUM_ROWS CARDINALITY SELECTIVITY HISTOGRAM	  NUM_BUCKETS
    ------------------------------ ---------- ----------- ----------- --------------- -----------
    OWNER				    72530	   30	      .04 NONE			    1
    OBJECT_NAME			    72530	44279	    61.05 NONE			    1
    SUBOBJECT_NAME			    72530	  114	      .16 NONE			    1
    OBJECT_ID			    72530	72530	      100 NONE			    1
    DATA_OBJECT_ID			    72530	 7687	     10.6 NONE			    1
    OBJECT_TYPE			    72530	   44	      .06 NONE			    1
    CREATED 			    72530	 1093	     1.51 NONE			    1
    LAST_DDL_TIME			    72530	 1143	     1.58 NONE			    1
    TIMESTAMP			    72530	 1214	     1.67 NONE			    1
    STATUS				    72530	    2		0 NONE			    1
    TEMPORARY			    72530	    2		0 NONE			    1
    
    COLUMN_NAME			 NUM_ROWS CARDINALITY SELECTIVITY HISTOGRAM	  NUM_BUCKETS
    ------------------------------ ---------- ----------- ----------- --------------- -----------
    GENERATED			    72530	    2		0 NONE			    1
    SECONDARY			    72530	    2		0 NONE			    1
    NAMESPACE			    72530	   21	      .03 NONE			    1
    EDITION_NAME			    72530	    0		0 NONE			    0
    
    15 rows selected.
    
    SQL> select count(*) from test where owner='SYS';
    
      COUNT(*)
    ----------
         30795
    
    SQL> BEGIN
      DBMS_STATS.GATHER_TABLE_STATS(ownname          => 'TEST',
                                    tabname          => 'TEST',
                                    estimate_percent => 100,
                                    method_opt       => 'for all columns size auto',
                                    no_invalidate    => FALSE,
                                    degree           => 8,
                                    cascade          => TRUE);
    END;
      2    3    4    5    6    7    8    9   10  
     11  /
    
    PL/SQL procedure successfully completed.
    
    SQL> select a.column_name,
           b.num_rows,
           a.num_distinct Cardinality,
           round(a.num_distinct / b.num_rows * 100, 2) selectivity,
           a.histogram,
           a.num_buckets
      from dba_tab_col_statistics a, dba_tables b
     where a.owner = b.owner
       and a.table_name = b.table_name
       and a.owner = 'TEST'
       and a.table_name = 'TEST';  2    3    4    5    6    7    8    9   10   11  
    
    COLUMN_NAME			 NUM_ROWS CARDINALITY SELECTIVITY HISTOGRAM	  NUM_BUCKETS
    ------------------------------ ---------- ----------- ----------- --------------- -----------
    OWNER				    72530	   30	      .04 FREQUENCY		   30
    OBJECT_NAME			    72530	44279	    61.05 NONE			    1
    SUBOBJECT_NAME			    72530	  114	      .16 NONE			    1
    OBJECT_ID			    72530	72530	      100 NONE			    1
    DATA_OBJECT_ID			    72530	 7687	     10.6 NONE			    1
    OBJECT_TYPE			    72530	   44	      .06 NONE			    1
    CREATED 			    72530	 1093	     1.51 NONE			    1
    LAST_DDL_TIME			    72530	 1143	     1.58 NONE			    1
    TIMESTAMP			    72530	 1214	     1.67 NONE			    1
    STATUS				    72530	    2		0 NONE			    1
    TEMPORARY			    72530	    2		0 NONE			    1
    
    COLUMN_NAME			 NUM_ROWS CARDINALITY SELECTIVITY HISTOGRAM	  NUM_BUCKETS
    ------------------------------ ---------- ----------- ----------- --------------- -----------
    GENERATED			    72530	    2		0 NONE			    1
    SECONDARY			    72530	    2		0 NONE			    1
    NAMESPACE			    72530	   21	      .03 NONE			    1
    EDITION_NAME			    72530	    0		0 NONE			    0
    
    auto的方式 有where条件去搜集
    
    
    ---------------------------------------------------------------------------------------------------
    SQL> drop table test purge;
    
    Table dropped.
    
    SQL>  create table test as select * from dba_objects;
    
    Table created.
    
    SQL> select a.column_name,
           b.num_rows,
           a.num_distinct Cardinality,
           round(a.num_distinct / b.num_rows * 100, 2) selectivity,
           a.histogram,
           a.num_buckets
      from dba_tab_col_statistics a, dba_tables b
     where a.owner = b.owner
       and a.table_name = b.table_name
       and a.owner = 'TEST'
       and a.table_name = 'TEST';  2    3    4    5    6    7    8    9   10   11  
    
    no rows selected
    
    
    SQL> BEGIN
      DBMS_STATS.GATHER_TABLE_STATS(ownname          => 'TEST',
                                    tabname          => 'TEST',
                                    estimate_percent => 100,
                                    method_opt       => 'for  columns  owner size skewonly',
                                    no_invalidate    => FALSE,
                                    degree           => 8,
                                    cascade          => TRUE);
    END;
      2    3    4    5    6    7    8    9   10  
     11  /
    
    PL/SQL procedure successfully completed.
    
    SQL> select a.column_name,
           b.num_rows,
           a.num_distinct Cardinality,
           round(a.num_distinct / b.num_rows * 100, 2) selectivity,
           a.histogram,
           a.num_buckets
      from dba_tab_col_statistics a, dba_tables b
     where a.owner = b.owner
       and a.table_name = b.table_name
       and a.owner = 'TEST'
       and a.table_name = 'TEST';  2    3    4    5    6    7    8    9   10   11  
    
    COLUMN_NAME			 NUM_ROWS CARDINALITY SELECTIVITY HISTOGRAM	  NUM_BUCKETS
    ------------------------------ ---------- ----------- ----------- --------------- -----------
    OWNER				    72530	   30	      .04 FREQUENCY		   30
    
    SQL> select a.column_name,
           b.num_rows,
           a.num_distinct Cardinality,
           round(a.num_distinct / b.num_rows * 100, 2) selectivity,
           a.histogram,
           a.num_buckets
      from dba_tab_col_statistics a, dba_tables b
     where a.owner = b.owner
       and a.table_name = b.table_name
       and a.owner = 'TEST'
       and a.table_name = 'TEST';  2    3    4    5    6    7    8    9   10   11  
    
    COLUMN_NAME			 NUM_ROWS CARDINALITY SELECTIVITY HISTOGRAM	  NUM_BUCKETS
    ------------------------------ ---------- ----------- ----------- --------------- -----------
    OWNER				    72530	   30	      .04 FREQUENCY		   30
    
    SQL> BEGIN
      DBMS_STATS.GATHER_TABLE_STATS(ownname          => 'TEST',
                                    tabname          => 'TEST',
                                    estimate_percent => 100,
                                    method_opt       => 'for all columns size repeat',
                                    no_invalidate    => FALSE,
                                    degree           => 8,
                                    cascade          => TRUE);
    END;
      2    3    4    5    6    7    8    9   10  
     11  /
    
    PL/SQL procedure successfully completed.
    
    SQL> select a.column_name,
           b.num_rows,
           a.num_distinct Cardinality,
           round(a.num_distinct / b.num_rows * 100, 2) selectivity,
           a.histogram,
           a.num_buckets
      from dba_tab_col_statistics a, dba_tables b
     where a.owner = b.owner
       and a.table_name = b.table_name
       and a.owner = 'TEST'
       and a.table_name = 'TEST';  2    3    4    5    6    7    8    9   10   11  
    
    COLUMN_NAME			 NUM_ROWS CARDINALITY SELECTIVITY HISTOGRAM	  NUM_BUCKETS
    ------------------------------ ---------- ----------- ----------- --------------- -----------
    OWNER				    72530	   30	      .04 FREQUENCY		   30
    OBJECT_NAME			    72530	44279	    61.05 NONE			    1
    SUBOBJECT_NAME			    72530	  114	      .16 NONE			    1
    OBJECT_ID			    72530	72530	      100 NONE			    1
    DATA_OBJECT_ID			    72530	 7687	     10.6 NONE			    1
    OBJECT_TYPE			    72530	   44	      .06 NONE			    1
    CREATED 			    72530	 1093	     1.51 NONE			    1
    LAST_DDL_TIME			    72530	 1143	     1.58 NONE			    1
    TIMESTAMP			    72530	 1214	     1.67 NONE			    1
    STATUS				    72530	    2		0 NONE			    1
    TEMPORARY			    72530	    2		0 NONE			    1
    
    COLUMN_NAME			 NUM_ROWS CARDINALITY SELECTIVITY HISTOGRAM	  NUM_BUCKETS
    ------------------------------ ---------- ----------- ----------- --------------- -----------
    GENERATED			    72530	    2		0 NONE			    1
    SECONDARY			    72530	    2		0 NONE			    1
    NAMESPACE			    72530	   21	      .03 NONE			    1
    EDITION_NAME			    72530	    0		0 NONE			    0
    
    
    
    method_opt       => 'for all columns size repeat',重复上次搜集过的统计信息
    
    

  • 相关阅读:
    POJ 1837 (DP)
    POJ 2255(分治递归)
    红球多于白球的概率(分治递归)
    HDOJ 4039 (Data_Structure)
    管道问题(prim)
    寻找给定区间内第K小的数(分治递归)
    大数加法
    1000元购物券 (分治递归)
    POJ 1308(并查集) (Data_Structure)
    我的2012年还不是世界末日
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13352436.html
Copyright © 2011-2022 走看看