您好,登錄后才能下訂單哦!
本篇內容主要講解“Oracle的基數與選擇性分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Oracle的基數與選擇性分析”吧!
一個列中唯一鍵(Distinct_keys)的個數,如有一個100W行的表,性別列的基數為2 (select distinct gender from test),主鍵列的基數為100W(select distinct mid from test);
基數/總行數所占的百分比,性別 2/100w * 100% 主鍵 100% 選擇性越高 越有利于使用索引 20~30%就算是比較高了
就看他的基數和選擇性 如果基數大選擇性大 那么使用索引就比較好
要看情況:
從OLTP 系統上來說在選擇性低的列上創建索引肯定不適合的,基數/選擇性高的列,適合建立B-Tree索引;
在OLAP系統中基數低的列根據需求,有可能會建立bitmap索引
創建一個test測試表, create table test as select * from dba_objects; create index idx_owner on test(owner); create index idx_object_name on test(object_name); |
查看owner列和object_name列的基數 select count(distinct owner),count(distinct object_name) from test; |
查看列的基數和選擇性,可以使用如下腳本 select count(distinct column_name),count(*) total_rows,count(distinct column_name) / count(*) * 100 selectivity from table_name; 我們查看test表的owner的基數和選擇性 select ,count(*) total_rows,count(distinct owner) / count(*) * 100 selectivity from test; count(distinct owner)列為基數 total_rows列為總行數 selectivity列為選擇性 在做SQL優化的時候,不要急忙運行上面SQL,首先應該檢查表的segment_size有多大,如果表的segment_size過大(比如超過SGA的buffer_cache),你要考慮運行上面SQL 是否對你當前的系統有影響,如果是測試環境,無所謂,如果是生產環境,要小心謹慎。 --其實建議使用統計信息表(dba_tab_col_statistics 、dba_tables )里的信息來查看選擇性和基數,這里注意我們首先要收集統計信息,否則返回的列是空值。 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 = upper('&owner') and a.table_name = upper('&table_name') and a.column_name = upper('&column_name'); |
select a.OWNER, a.INDEX_NAME, a.TABLE_NAME, a.DISTINCT_KEYS Cardinality, a.NUM_ROWS, round(a.DISTINCT_KEYS / NUM_ROWS * 100, 2) selectivity from dba_ind_statistics a where A.OWNER = upper('&owner'); selectivity <5 一般選擇性小于5% 就屬于選擇性差 如果統計信息有可能不是最新的最好使用下面的語句 select table_name,index_name,round(distinct_keys/num_rows * 100, 2) selectivity from user_indexes; 但是選擇性低的列也不一定不需要建索引要根據業務來比如有7W行記錄 SCOTT的有23行如果經常根據SCOTT查要建立索引 |
到此,相信大家對“Oracle的基數與選擇性分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。