count(*),count(1)和count(主键) 区别
2024-10-18 18:03:05
看如下数据:
SQL> select count(*) from ysgl_compile_reqsub; COUNT(*)
----------
5288265 已用时间: 00: 00: 07.51
SQL> select count(1) from ysgl_compile_reqsub; COUNT(1)
----------
5288265 已用时间: 00: 00: 00.68
SQL> select count(id) from ysgl_compile_reqsub; COUNT(ID)
----------
5288265 已用时间: 00: 00: 00.68
SQL> select count(rowid) from ysgl_compile_reqsub; COUNT(ROWID)
------------
5288265 已用时间: 00: 00: 01.01
SQL> select count(rowid) from ysgl_vdata_his; COUNT(ROWID)
------------
5299458 已用时间: 00: 00: 09.98
SQL> select count(*) from ysgl_vdata_his; COUNT(*)
----------
5299458 已用时间: 00: 00: 00.93
SQL> select count(1) from ysgl_vdata_his; COUNT(1)
----------
5299458 已用时间: 00: 00: 00.71
SQL> select count(1) from ysgl_excelbasic; COUNT(1)
----------
3755052 已用时间: 00: 00: 04.60
SQL> select count(*) from ysgl_excelbasic; COUNT(*)
----------
3755052 已用时间: 00: 00: 00.50
SQL>
不考虑Null的情况:
count(1)和count(主键) 这两个只扫描主键Index就可以得到数据,
count(*)是扫描表的。
所以count(1)和count(主键)这两个效率高。
还有一种写法是count(ROWID)这也是只扫描Index的,效率高。
这个问题就是问你什么时候Oracle容易走表查询,什么时候Oracle容易走INDEX查询。
实际应用中,你得看实际情况,没准这个表没有唯一键索引呢?在CBO(ORACLE提供的一种SQL优化器)的情况下,统计情报不准确呢?
这种问题会出现好多版本的回答。测试环境不同结果也不一样,你随便键个表,看看它们的执行计划,就能看出他们的区别了。
最新文章
- SAP 订单状态跟踪
- zju(7)ADC操作实验
- Daily Scrum – 1/4
- UVa 11054 Wine trading in Gergovia【贪心】
- js滑动门及对像的使用
- 小蔡计算器 V4.0新版全新发布上线啦~欢迎大家下载使用哈~
- ajax调用后台Java
- postgresql文档生成注意事项
- Hibernate在自由状态和持久的状态转变
- UVALive 2520 Holedox Moving(BFS+状态压缩)
- mui单选和多选框
- RTX临界段,中断锁与任务锁
- eslint详细配置
- 自学Linux Shell4.3-处理数据文件sort grep gzip tar
- 使用git进行代码的推送
- Dubbo 生态添新兵,Dubbo Admin 发布 v0.1
- How React Works (一)首次渲染
- HTTP协议常用标准状态码含义
- 【转】Apache服务器的下载与安装
- 一个导致MGR数据混乱Bug的分析和修复