oracle table.count,ORACLE 表如何count最快?

前言

ORACLE  count计数最快的方法是使用有BITMAP索引的列,但测试时,ORACLE会自动选择有位图索引的列,count(1)和count(*)均会自动选择有BITMAP索引的列。如果HINT提示指定的索引列为非BITMAP索引,依然可能会被ORACLE忽略!       例如:SELECT /*+ INDEX(T,IDX_T_ZYFL)*/ COUNT(T.OBJ_ID) FROM T_GZPJL2 T;

T_GZPJL2 表总记录数698868条, ZYFL字段只有3个值,而索引为普通索引,被ORACLE忽略。

问答

1、在Oracle中如何获取表的记录数,最快的是count(*),count(1)还是count(【某个字段】)呢?

答案是:count()有索引的字段比count没有索引的字段块。

2、为什么测试的时候count(*)和count(1)测试效果一样?

答案是:ORACLE 10g以上的版本基于成本的优化器自己做出了选择,总是选择有索引的列进行计数。

3、不管是什么索引,count()速度都一样快吗?

答案是:否!使用位图索引的计数最快,使用B+数索引(普通索引)的次之,性能相差可达1个数量级以上。

4、count()时使用提示(hint),ORACLE一定会使用给定的索引?

答案是:否!如果表已建位图索引,即使你指定了其他非位图索引,ORACLE仍然会倔强地使用BITMAP索引。

结论

ORACLE中表count()时,使用有位图索引的字段(ORACLE 10g 以上版本优化器会自动选择)最快,其他索引次之,但位图索引的副作用是在巨量数据情况下,可能会影响插入或更新性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值