当前位置: 首页 > news >正文

oracle COUNT(1) 和 COUNT(*)

在 Oracle 数据库中,COUNT(1) 和 COUNT(*) 都用于统计表中的行数,但它们的语义和性能表现存在一些细微区别。

1. 语义区别

  • COUNT(*)
    统计表中所有行的数量,包括所有列值为 NULL 的行。它直接针对表的行进行计数,不关心具体列的值。

  • COUNT(1)
    统计表中所有行的数量,同样包括所有列值为 NULL 的行。这里的 1 是常量表达式,对每一行进行求值。由于 1 永远非空,因此结果与 COUNT(*) 相同。

2. 性能区别

在 Oracle 中,两者的执行效率几乎完全相同,因为优化器会对它们进行等价处理:

  • 对于大多数场景,COUNT(*) 和 COUNT(1) 会生成相同的执行计划(如全表扫描或索引快速全扫描)。

  • 即使表中包含大量 NULL 值,两者的性能也无差异,因为 Oracle 不会因为 COUNT(*) 需要检查所有列而降低效率。

 

3. 使用建议

  • 推荐使用 COUNT(*)
    这是 SQL 标准中定义的行数统计方式,语义更明确(直接表示“统计所有行”),可读性更高。

  • 避免使用 COUNT(列名)(除非必要)
    如果使用 COUNT(列名),会跳过该列为 NULL 的行,可能导致结果与预期不符。例如:

 

4 总结

对比项COUNT(*)COUNT(1)
语义统计所有行统计所有行
性能与 COUNT(1) 相同与 COUNT(*) 相同
可读性更高(符合 SQL 标准)稍低(依赖常量表达式)
适用场景通用行数统计通用行数统计

在 Oracle 中,COUNT(*) 和 COUNT(1) 功能等价且性能一致。推荐优先使用 COUNT(*) 以提高代码可读性,避免对 COUNT(1) 的过度依赖。

相关文章:

  • HTTP实现心跳模块
  • 吴恩达深度学习复盘(15)精度和召回率
  • 八大排序算法
  • JavaScript 定时器
  • Go语言--语法基础4--基本数据类型--整数类型
  • 深度学习(一)
  • 网页制作中的MVC和MVT
  • 【JDBC-54.1】MySQL JDBC连接字符串常用参数详解
  • 二.springBoot项目集成ElasticSearch及使用
  • PyRoboPlan 库,给 panda 机械臂微分 IK 上大分,关节限位、碰撞全不怕
  • 从 Vue 到 React:深入理解 useState 的异步更新与函数式写法
  • 理解分布式数据库基本概念:逻辑透明、分片透明、复制透明、位置透明
  • 2、JSX:魔法世界的通行证——用魔法符号编织动态界面
  • C++基础精讲-06
  • 青少年编程与数学 02-016 Python数据结构与算法 17课题、数论算法
  • goweb连接数据库操作
  • 02_位掩码逻辑及Java示例
  • 阿里云备案有必要选择备案管家服务吗?自己ICP备案可以吗?
  • Java第四节:idea在debug模式夏改变变量的值
  • 详细解释:k ≈ 3 对应 99.7% 置信度
  • 美国外贸网站建设/搜索引擎优化的常用方法
  • 广州市网站制作服务公司/关键词搜索方法
  • 郑州专业建网站/网店买卖有哪些平台
  • 湖州做网站推广的公司/女生seo专员很难吗为什么
  • 网站建设上海网站建设/在线培训课程
  • 天津做网站的哪家好/seo赚钱暴利