首页 > 代码库 > count(*),count(1)和count(主键) 区别
count(*),count(1)和count(主键) 区别
看如下数据:
1 SQL> select count(*) from ysgl_compile_reqsub; 2 3 COUNT(*) 4 ---------- 5 5288265 6 7 已用时间: 00: 00: 07.51 8 SQL> select count(1) from ysgl_compile_reqsub; 9 10 COUNT(1)11 ----------12 528826513 14 已用时间: 00: 00: 00.6815 SQL> select count(id) from ysgl_compile_reqsub;16 17 COUNT(ID)18 ----------19 528826520 21 已用时间: 00: 00: 00.6822 SQL> select count(rowid) from ysgl_compile_reqsub;23 24 COUNT(ROWID)25 ------------26 528826527 28 已用时间: 00: 00: 01.0129 SQL> select count(rowid) from ysgl_vdata_his;30 31 COUNT(ROWID)32 ------------33 529945834 35 已用时间: 00: 00: 09.9836 SQL> select count(*) from ysgl_vdata_his;37 38 COUNT(*)39 ----------40 529945841 42 已用时间: 00: 00: 00.9343 SQL> select count(1) from ysgl_vdata_his;44 45 COUNT(1)46 ----------47 529945848 49 已用时间: 00: 00: 00.7150 SQL> select count(1) from ysgl_excelbasic;51 52 COUNT(1)53 ----------54 375505255 56 已用时间: 00: 00: 04.6057 SQL> select count(*) from ysgl_excelbasic;58 59 COUNT(*)60 ----------61 375505262 63 已用时间: 00: 00: 00.5064 SQL>
不考虑Null的情况:
count(1)和count(主键) 这两个只扫描主键Index就可以得到数据,
count(*)是扫描表的。
所以count(1)和count(主键)这两个效率高。
还有一种写法是count(ROWID)这也是只扫描Index的,效率高。
这个问题就是问你什么时候Oracle容易走表查询,什么时候Oracle容易走INDEX查询。
实际应用中,你得看实际情况,没准这个表没有唯一键索引呢?在CBO(ORACLE提供的一种SQL优化器)的情况下,统计情报不准确呢?
这种问题会出现好多版本的回答。测试环境不同结果也不一样,你随便键个表,看看它们的执行计划,就能看出他们的区别了。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。