贝利信息

SQL 从“能查”到“可信”的进化路径

日期:2026-01-26 00:00 / 作者:舞夢輝影
COUNT()统计所有行(含NULL),COUNT(字段)跳过该字段为NULL的行;JOIN导致重复时COUNT()虚高,应改用COUNT(DISTINCT主键)或EXISTS校验。

为什么 COUNT(*) 和 COUNT(字段) 结果不一致?

因为 COUNT(*) 统计所有行(包括含 NULL 的行),而 COUNT(字段) 会自动跳过该字段值为 NULL 的记录。这不是 bug,是 SQL 标准定义的行为。

JOIN 后 COUNT 突然翻倍,怎么定位?

本质是笛卡尔积副作用:主表一行匹配从表多行时,COUNT(*) 会把每条 JOIN 结果都算一次。

时间字段用 BETWEEN 还是 >= AND

>= AND 更可靠,尤其涉及 TIMESTAMP 或带毫秒的字段。

为什么加了索引,执行计划还是没走?

索引存在 ≠ 查询会用。常见干扰项:

可信不是靠“写得出来”,是靠每次结果可复现、边界可推演、变更可预判。最容易被忽略的,是把“查得出来”当成“查得对”——而真正的断点,往往藏在 NULL、时区、隐式类型转换和统计信息滞后这些安静的地方。