oracle count(*)与count(列)的困扰

      从我做开发dba开始,count(*)count(列)谁快就一直的困扰着我,通过这次学习,我总算是明白了。下面我把我的实验过程写出来。实验环境: oracle11gR2,  实验数据:自备 

      第一种情况:没有索引的情况下 运行count(*)count()

      

      

      可以看到cost是一样的。 现在执行计划都是 全表扫表的。速度看起来是一样的。


  第二种情况:建立一个索引试试

  create index idx_object_id on t(object_id);

  

  

   结论:在有索引的情况下 OUNT(列)比COUNT(*)。这个时候索引字段是包括null的,

 如果我们限制下索引字段not Null

 

  第三步:限制count字段not null

    alter table T modify object_id  not  null;

   

   

   

     看来count()count(*)其实一样快,如果索引列是非空的,count(*)可用到索引,此时一样快!真相真是如此 吗?不是的,其实两者根本没有可比性,性能比较首先要考虑写法等价,这两个语句根本就不等价!!!   

      通过上面的实验,我以后不会吧count(*)count()比较快慢了。

   最后补充下count(*)包括Null值,count(列)不包括Null.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值