91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Oracle的基數與選擇性分析

發布時間:2021-11-11 16:30:37 來源:億速云 閱讀:264 作者:iii 欄目:關系型數據庫

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

Oracle的基數與選擇性分析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)Oracle的基數與選擇性分析列為基數

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');

Oracle的基數與選擇性分析

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% 就屬于選擇性差Oracle的基數與選擇性分析






如果統計信息有可能不是最新的最好使用下面的語句

select table_name,index_name,round(distinct_keys/num_rows * 100, 2) selectivity from user_indexes;

但是選擇性低的列也不一定不需要建索引要根據業務來比如有7W行記錄 SCOTT的有23行如果經常根據SCOTT查要建立索引Oracle的基數與選擇性分析

到此,相信大家對“Oracle的基數與選擇性分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

AI

金阳县| 南涧| 尤溪县| 文安县| 邢台县| 高碑店市| 荃湾区| 英山县| 辽宁省| 同心县| 重庆市| 东安县| 原平市| 洛宁县| 蒲城县| 交城县| 武鸣县| 车险| 临泉县| 罗平县| 丰台区| 沈阳市| 胶南市| 清远市| 象州县| 连平县| 拉萨市| 册亨县| 江北区| 瑞昌市| 肥东县| 彰化县| 贵州省| 衡阳县| 青川县| 社旗县| 大城县| 潜江市| 海伦市| 壤塘县| 拜泉县|