亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle的擴展統計信息特性是怎樣的

發布時間:2021-11-30 14:26:46 來源:億速云 閱讀:201 作者:柒染 欄目:關系型數據庫

本篇文章給大家分享的是有關Oracle的擴展統計信息特性是怎樣的,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

oracle 11g在統計信息收集方面增加了擴展統計信息的特性,它可以收集一個表中相關列上的統計信息,也可以收集函數表達式上的統計信息.使選擇率,成本的估計更加準確,也更容易走正確的執行計劃.在相關列上收集統計信息,好處還是很明顯的.例如兩列在邏輯上有一定的關系,但如果只是對這兩個列單獨做統計信息的收集,根據多條件的選擇率計算{ (A AND B的選擇率為:OPSEL[a]*OPSEL[b]); (A OR B 的選擇率為:OPSEL[a]+OPSEL[b]-OPSEL[a]OPSEL[b]); (NOT A的選擇率為:1-OPSEL[a])}, 估算出來的選擇率就可能偏差很大.

可以針對關聯列或者表達式來收集擴展統計信息。關聯列是指,假設有個世界人口表,使用謂詞country = 'Denmark' and language = 'Danish', 對于這張表中的大部分記錄來講,這兩個限制條件很可能適用于同一批記錄。事實上,說丹麥語的人大部分住在丹麥,大部分住在丹麥的人說丹麥語。也就是說,這兩個約束條件幾乎是冗余的,這樣的列通常被叫做關聯列(correlated column), 也給優化器出了難題。這是因為,沒有對象統計信息或者直方圖來描述數據之間的依賴關系。換句話說,查詢優化器實際上假定存儲在不同列上的數據是不相關的。

以下測試:
DB Version:11.2.0.4
----產生測試數據
drop table scott.test01 purge;
create table scott.test01 as select * from dba_objects;

--把object_name 更新為和object_type一樣,用于測試.
update scott.test01 set object_name=object_type;
commit;

1.收集單列統計信息,查看執行計劃
--收集單列統計信息

exec dbms_stats.gather_table_stats('SCOTT','TEST01');

--查看表的行數
select  table_name,num_rows from dba_tables where owner = 'SCOTT' and table_name = 'TEST01';

TABLE_NAME                       NUM_ROWS
------------------------------ ----------
TEST01                              87048

--產生語句的執行計劃
explain plan for select * from scott.test01 where object_name='INDEX' and object_type='INDEX';

SQL> select * from table(dbms_xplan.display());



這里可以看到,估算的返回行數是41,顯然和實際相差很遠

--行數估算
select rpad(column_name, 30, ' ') column_name,
       rpad(num_distinct, 8, ' ') num_distinct,
       rpad(utl_raw.cast_to_varchar2(low_value), 15, ' ') low_value,
       rpad(utl_raw.cast_to_varchar2(high_value), 10, ' ') high_value,
       rpad(num_nulls, 8, ' ') num_nulls,
       rpad(avg_col_len, 6, ' ') avg_col_len,
       rpad(density, 20, ' ') density,
       histogram
  from dba_tab_col_statistics
 where owner = 'SCOTT'
   and table_name = 'TEST01'
   and column_name in ('OBJECT_NAME', 'OBJECT_TYPE');

SQL> col COLUMN_NAME for a15
SQL> col LOW_VALUE for a15
SQL> col HIGH_VALUE for a15
SQL> select rpad(column_name, 30, ' ') column_name,
  2         rpad(num_distinct, 8, ' ') num_distinct,
  3         rpad(utl_raw.cast_to_varchar2(low_value), 15, ' ') low_value,
  4         rpad(utl_raw.cast_to_varchar2(high_value), 10, ' ') high_value,
  5         rpad(num_nulls, 8, ' ') num_nulls,
  6         rpad(avg_col_len, 6, ' ') avg_col_len,
  7         rpad(density, 20, ' ') density,
  8         histogram
  9    from dba_tab_col_statistics
 10   where owner = 'SCOTT'
 11     and table_name = 'TEST01'
 12     and column_name in ('OBJECT_NAME', 'OBJECT_TYPE');


估算的返回行數是41,是由兩個列的density相乘再乘以表的行數得到,0.0217391304347826*0.0217391304347826*87048=41.1379962=41
   
2.收集多列擴展統計信息,查看執行計劃
--收集多列擴展統計信息

exec dbms_stats.gather_table_stats('scott','test01',method_opt =>'for columns (object_name,object_type)');

--產生語句的執行計劃  
explain plan for select * from scott.test01 where object_name='INDEX' and object_type='INDEX';

SQL> select * from table(dbms_xplan.display());



--查詢實際返回行數:
SQL> select count(*) from scott.test01 where object_name='INDEX' and object_type='INDEX';

  COUNT(*)
----------
      5078

這里可以看到,執行計劃估算的返回行數是4986,已經基本上和實際返回行數5078相近了.

PS:
1.擴展統計信息的收集,可以用
select dbms_stats.create_extended_stats('scott','test01','(object_name,object_type)')from dual 方式創建擴展統計列, 然后dbms_stats.gather_table_stats('scott','test01') 收集統計信息 ; 也可以直接在dbms_stats.gather_table_stats中的method_opt屬性同時建立擴展統計收集統計數據.例如如下:
dbms_stats.gather_table_stats('scott','test01',method_opt =>'for columns (object_name,object_type)');

2.oracle 11g不僅可以收集多列擴展統計信息,還可以收集函數和表達式的擴展統計信息.

以上就是Oracle的擴展統計信息特性是怎樣的,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

赤峰市| 西乌珠穆沁旗| 资溪县| 鲁甸县| 黑水县| 石河子市| 卓资县| 凌海市| 扬中市| 迁西县| 五寨县| 凤翔县| 宁津县| 湾仔区| 句容市| 天祝| 左权县| 苗栗县| 崇义县| 改则县| 塔河县| 巴中市| 抚顺县| 黄浦区| 夏津县| 海南省| 泸水县| 寻乌县| 永寿县| 定安县| 张家口市| 金寨县| 宣恩县| 长泰县| 汶上县| 沙坪坝区| 清镇市| 大连市| 称多县| 武宁县| 灵璧县|