ITPub博客

首页 > 数据库 > Oracle > 从不同角度分析count(*)性能

从不同角度分析count(*)性能

原创 Oracle 作者:xingchenfengyu 时间:2014-12-19 14:06:18 0 删除 编辑
 
  • 说明:
                          通过经典的select count(*) from table_name;从不同角度来分析其性能。
  • 准备:
                          首先准备6张表,其表结构一致,记录数一致:
                          

                         表的记录数如下所示:
                          
  • 表的相关约束以及索引情况说明:
                         TEST03的ID字段为普通索引;
                         TEST04的ID字段为唯一索引;
                         TEST05无任何索引以及约束;
                         TEST06的ID字段有非空约束;
                         TEST07的ID字段有主键约束;
                         TEST08的id02字段有位图索引;

  • 实验步骤:
                         对这几个表均做如下查询,将autotrace打开:
                        

  • 各查询分析:
                       1.首先ID字段只有普通索引的TEST03表,如果没有指定id is not null,那么他的执行计划是'全表扫描'(table access full)。如果指定了id is not null,那么其执行计划是'索引快速全扫描'(index fast full scan)。
                        通过比较执行计划中的COST CPU和TIME以及统计信息中的CONSISTENT GETS和PHYSICAL READS我们可以看出两者的性能差距:
                        

                      2.对ID列有唯一索引的TEST04表进行分析,和上述一样,通过指定id is not null可看出差距,不过,这里因为唯一索引的'索引快速全扫描'要比之前的普通索引的代价更低:
                        

                       3.对于没有任何约束以及索引的test05表,条件id is not null指定与不指定没区别:
                        

                       4.对于ID列有非空约束的TEST06表,指定与不指定ID is not null性能均是一样的:
                       

                      5.对于ID列有主键的test07表 ,指定与不指定id is not null都是一样的,因为oracle的CBO优化器都会选择这一列来作为过滤条件,因为我们知道,'主键'就是'非空+唯一+唯一索引':
                       

                     6.对于ID02列有位图索引的test08表,指定ID02 is not null,其性能是最优的,这与位图索引的组织结构有关,因为其只存储0和1,那么只需统计某一列0和1的总数就行:
                       

  • 总结:
                      通过上述实验,对于count(*)的查询让我们知道了非空对于索引查询的重要性。在指定非空的条件下,按照上述实验我们可以知道,性能趋势为:位图索引>唯一索引>普通索引>无索引。
                      我们也可以知道非空和唯一值的重要性,这就要我们对数据库整体有一个良好的架构。
                      另外强调一点,位图索引对更新操作非常敏感,在update以及delete操作频繁的数据表中,避免使用位图索引。 


——————————————————————————————————————————

谢滟舰   支持服务部

用友金融信息技术有限公司 Yonyou Financial Information Technology  Co., Ltd.

 手机(Mob):18664878729
邮箱(E-mail):xieyja
@yonyou.com 

网址(Web): 
用友金融官方微博:http://e.weibo.com/ufidabanking
地址:北京海淀区北清路68 号用友软件园 100094
Add: Yonyou Software Park, No. 68 Beiqing Road, Haidian District, Beijing, China  100094

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27119553/viewspace-1373235/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2012-07-01

  • 博文量
    2
  • 访问量
    4879