久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Oracle的基數與選擇性分析

178次閱讀
沒有評論

共計 1998 個字符,預計需要花費 5 分鐘才能閱讀完成。

本篇內容主要講解“Oracle 的基數與選擇性分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“Oracle 的基數與選擇性分析”吧!

基數

  一個列中唯一鍵 (Distinct_keys) 的個數,如有一個 100W 行的表,性別列的基數為 2 (select distinct gender from test),主鍵列的基數為 100W(select distinct mid from test);

選擇性

  基數 / 總行數所占的百分比,性別 2/100w * 100% 主鍵 100%   選擇性越高 越有利于使用索引 20~30% 就算是比較高了

1、如何判斷是一個索引創建的是好還是壞呢? 

  就看他的基數和選擇性 如果基數大選擇性大 那么使用索引就比較好

2、性別這個列使不使用索引?

要看情況:

從 OLTP 系統上來說在選擇性低的列上創建索引肯定不適合的,基數 / 選擇性高的列,適合建立 B -Tree 索引;

    在 OLAP 系統中基數低的列根據需求,有可能會建立 bitmap 索引

3、如何查看列的選擇性和基數呢?

創建一個 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

4、找出系統某個用戶中不合理(選擇性很低)的索引腳本

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 的基數與選擇性分析”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-20發表,共計1998字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 航空| 桑日县| 上杭县| 东港市| 兴安盟| 岑溪市| 林州市| 原阳县| 黄大仙区| 丘北县| 明溪县| 金昌市| 铜山县| 玉屏| 武平县| 南宁市| 米林县| 芷江| 三门县| 花垣县| 叙永县| 孟村| 潞城市| 常山县| 台前县| 平舆县| 南澳县| 万载县| 陈巴尔虎旗| 晋州市| 孟连| 宣汉县| 资中县| 太和县| 永善县| 湘乡市| 藁城市| 习水县| 莱西市| 化州市| 峨边|