【TUNE_ORACLE】列出必須建立直方圖的列SQL參考

dapolan發表於2022-03-08

實驗環境

搭建平臺:VMware Workstation

OS:RHEL 6.10

Grid&DB:Oracle 11.2.0.4


SQL參考

--******該指令碼依賴統計資訊!!必須先收集統計資訊!!******

注:

統計收集方法詳見:   http://blog.itpub.net/69992972/viewspace-2784605/


--1. 沒有收集過直方圖,且列出現在where條件中,列的選擇性小於1%

select a.owner,

       a.table_name,

       a.column_name,

       b.num_rows,

       a.num_distinct,

       trunc(num_distinct / num_rows * 100, 2) selectivity,

       'Need Gather Histogram' notice

  from dba_tab_col_statistics a, dba_tables b

 where a.owner = 'TEST'

   and a.table_name = 'TAB'

   and a.owner = b.owner

   and a.table_name = b.table_name

   and num_distinct / num_rows < 0.01   --選擇性小於1%

   and (a.owner, a.table_name, a.column_name) in

       (select r.name owner, o.name table_name, c.name column_name

          from sys.col_usage$ u, sys.obj$ o, sys.col$ c, sys.user$ r

         where o.obj# = u.obj#

           and c.obj# = u.obj#

           and c.col# = u.intcol#

           and r.name = 'TEST'

           and o.name = 'TAB')

   and a.histogram = 'NONE';


--2. 列出現在where條件中,列的選擇性小於5%,總行數大於5W

select a.owner,

       a.table_name,

       a.column_name,

       b.num_rows,

       a.num_distinct,

       trunc(num_distinct / num_rows * 100, 2) selectivity,

       'Need Gather Histogram' notice

  from dba_tab_col_statistics a, dba_tables b

 where a.owner = 'TEST'

   and a.table_name = 'TAB'

   and a.owner = b.owner

   and a.table_name = b.table_name

   and num_distinct / num_rows < 0.05   --選擇性小於5%

   and num_rows > 50000   --總行數大於5萬行

   and (a.owner, a.table_name, a.column_name) in

       (select r.name owner, o.name table_name, c.name column_name

          from sys.col_usage$ u, sys.obj$ o, sys.col$ c, sys.user$ r

         where o.obj# = u.obj#

           and c.obj# = u.obj#

           and c.col# = u.intcol#

           and r.name = 'TEST'

           and o.name = 'TAB');


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70014851/viewspace-2867407/,如需轉載,請註明出處,否則將追究法律責任。

相關文章