count(*),count(1),count(列名)执行原理、性能差异比较 以下是 Oracle 中 COUNT函数的详细解析及对比包含执行原理、性能差异和最佳实践。一、执行原理1. COUNT(expr) —— 统计非 NULL 值作用返回表达式中 不为 NULL​ 的行数。SELECT COUNT(commission_pct) FROM employees;•原理遍历 commission_pct列跳过所有 NULL值只计算有值的行。•注意如果 expr涉及多列如 COUNT(col1 col2)只要其中一列为 NULL整个表达式结果即为 NULL该行不计入统计。2. COUNT(DISTINCT expr —— 统计唯一非 NULL 组合作用返回去重后、且 不为 NULL​ 的值的组合数量Oracle 支持多列去重。-- 单列去重SELECT COUNT(DISTINCT department_id) FROM employees;-- 多列组合去重 (Oracle 特有)SELECT COUNT(DISTINCT department_id || - || job_id) FROMemployees;-- 或SELECT COUNT(DISTINCT department_id, job_id) FROM employees; -- 12c 支持标准语法•原理先对 expr组合进行去重再排除掉结果为 NULL的组合最后计数。•注意如果 department_id和 job_id都为 NULL该组合会被忽略如果其中一个为 NULL该组合依然参与去重计数。3. COUNT(*) vs COUNT(1) —— 统计所有行作用两者都返回表中的总行数包含 NULL 行。SELECT COUNT(*) FROM employees;SELECT COUNT(1) FROM employees;核心区别与执行原理特性COUNT(*)COUNT(1)含义​统计所有行数对每一行计算常量1然后统计行数NULL 处理​包含 NULL 行包含 NULL 行因为1永远非 NULLOracle 优化​最优。Oracle 对其进行了特殊优化直接读取行数无需计算表达式。优化器通常会将其优化为COUNT(*)但早期版本或特定情况下可能略逊于*。索引利用​若表有主键或任意非空索引可仅扫描索引INDEX FAST FULL SCAN。同左优化后行为一致。结论COUNT(*)是 SQL 标准中统计行数的标准写法也是 Oracle 官方推荐的最佳实践。综合对比总结、函数是否计 NULL 行是否去重典型用途COUNT()*​是​否统计全表或分组的总行数最常用COUNT(1)​是​否统计总行数老习惯建议改用*COUNT(expr)​否​否统计某列有值的数量如统计有邮箱的员工数COUNT(DISTINCT expr)​否​是​统计某列不重复值的数量如统计有多少个部门二、性能排序通常情况下COUNT(*) ≈ COUNT(1) COUNT(主键) COUNT(普通列)•原因COUNT(*)不需要读取具体的列数据只需找到一条存在的记录即可利用索引最快。COUNT(列)需要读取该列的数据块I/O 成本更高。三、最佳实践建议1.统计行数无条件使用 COUNT(*)。2.统计某列非空值使用 COUNT(column_name)。3.统计唯一值使用 COUNT(DISTINCT column_name)。4.多列 DISTINCT 的陷阱COUNT(DISTINCT col1, col2)统计的是 (col1, col2)组合的唯一性而不是分别统计两列的唯一值。-- 错误想统计两列各自去重后的总数SELECT COUNT(DISTINCT col1), COUNT(DISTINCT col2) FROM t;-- 正确必须分开写

相关新闻

最新新闻

NumPy核心机制解析:从ndarray、dtype到切片索引的高性能计算实践

NumPy核心机制解析:从ndarray、dtype到切片索引的高性能计算实践

1. 项目概述:从“数据容器”到“计算引擎”的认知跃迁 如果你刚开始接触数据科学或者机器学习,大概率会从某个教程里看到一行 import numpy as np 。很多人,包括当年的我,都曾把它简单地理解为一个“更快的列表”或者“用来存数…

2026/8/29 19:32:12
高德JS API 2.0与GLTF三维模型精准地理对齐实战

高德JS API 2.0与GLTF三维模型精准地理对齐实战

简介:地理空间可视化是数字孪生、智慧园区和车路协同的核心基础能力,其本质是将真实世界坐标(WGS84/CGCS2000)经加密偏移(GCJ-02)、墨卡托投影、缩放映射后,精确转换为three.js世界坐标系下的三…

2026/8/29 19:32:12
包装行业生产管理系统,如何提升效率?

包装行业生产管理系统,如何提升效率?

1. 引言包装行业普遍具有“订单杂、规格多、交付周期短、现场协同要求高”的特点。传统依赖人工排产、纸质工单和口头沟通的管理方式,很容易出现订单漏排、物料不齐套、设备空转和进度不透明等问题。引入一套贴合包装业务特点的生产管理系统,核心目标并不…

2026/8/29 19:32:12
MES制造执行系统优势解析:企业如何借助数字化实现生产效率跃升

MES制造执行系统优势解析:企业如何借助数字化实现生产效率跃升

一、引言:为什么制造企业越来越离不开 MES在制造业竞争日趋激烈的背景下,单纯的设备升级和人力投入已经难以支撑企业持续降本增效。越来越多的制造企业开始关注车间现场的管理精细化问题:生产计划是否真正落到了每一道工序?设备停…

2026/8/29 19:32:12
从溢出到高精度:手把手构建大数运算库与性能优化实战

从溢出到高精度:手把手构建大数运算库与性能优化实战

1. 从“溢出”到“模拟”:为什么我们需要高精度计算在编程世界里,我们每天都在和数字打交道。无论是计算电商平台的订单总额,还是处理金融交易中的金额,甚至是进行科学计算,数字运算都是基础中的基础。大多数编程语言都…

2026/8/29 19:32:12
Dify 从安装部署到智能体搭建:开源大模型平台实战指南

Dify 从安装部署到智能体搭建:开源大模型平台实战指南

Dify 是一个开源的大模型应用开发与智能体搭建平台,这篇文章会从安装部署讲起,一直做到第一个能用的 AI 智能体。整个流程我尽量按新手能直接照着操作的方式写,不绕弯子。先说结论:只要机器配置不是太老、Docker 环境正常&#xf…

2026/8/29 19:27:12