基数、选择性、直方图

一、基数:

 
   一个列中唯一键(Distinct_keys)的个数,如有一个100W行的表,性别列的基数为2 (select distinct gender from test),主键列的基数为100W(select distinct mid from test);

二、选择性:

    基数/总行数所占的百分比,性别 2/100w * 100% 主键 100%  选择性越高 越有利于使用索引
    20~30%就算是比较高了

 2.1、如何判断是一个索引创建的是好还是坏呢? 

     就看他的基数和选择性 如果基数大选择性大 那么使用索引就比较好

 2.2、性别这个列使不使用索引?

    要看情况,从OLTP系统上来说 在选择性低的列上创建索引肯定不适合的, 基数/选择性高的列,适合建立B-Tree索引;
     在OLAP系统中 基数低的列根据需求,有可能会建立bitmap索引

 2.3、如何查看列的选择性和基数呢?

create table test as select * from dba_objects;
create index idx on test(owner); 
--最简单直接的写法是运行下面的语句 但可能会卡死 想象如果一张表30G 上千万行 而segment_size只有10G 
select count(distinct column_name),count(*) total_rows,count(distinct column_name) / count(*) * 100 selectivity from table_name;

--在做SQL优化的时候,不要急
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值