在阅读一些与SQL调优相关的文档时,我发现:

SELECT COUNT(*) :

  • 计算行数.
  • 通常不正确地用于验证记录的存在.

SELECT COUNT(*)真的那么糟糕吗?

验证记录存在的正确方法是什么?

推荐答案

最好使用以下任一选项:

-- Method 1.
SELECT 1
FROM table_name
WHERE unique_key = value;

-- Method 2.
SELECT COUNT(1)
FROM table_name
WHERE unique_key = value;

第一个选项应该不会给出结果或一个结果,第二个计数应该是零或一.

您使用的文档有多旧?尽管您已经阅读了好的建议,但最近的RDBMS的optimize SELECT COUNT(*)中的大多数查询优化器仍然存在差异,因此尽管在理论上(和较旧的数据库)存在差异,但您不应该注意到实践中的任何差异.

Sql相关问答推荐

识别顺序记录组

根据另一列的值添加另一列的给定值

如何返回字符串中包含相同值的数据?

Trino/Presto sq:仅当空值位于组中第一个非空值之后时,才用值替换空值

Postgres trunc_date删除一个月

Oracle SQL-将结果列在单行中

从日期开始向前填充重复项

使用DatePart函数对日期时间值进行分组

是否可以为表中的所有列生成散列值?

基于开始/结束日期重叠的BigQuery突发行

向表中添加新列取决于表的日期列(unpivot)

SQL SUM Filter逻辑解释

SQL Select 字母范围没有给我任何东西

有没有办法在雅典娜中将字符串转换为 int ?

获取所有用户的第一次和最后一次发货以及到达日期

使用row_number() over partition by保留首次出现且值不为空的行的方法

一次 Select 语句中按组累计的SQL累计数

根据是否存在值组合分组并 Select 行

使用 regexp_replace 替换所有出现的特殊字符

过滤具有一对多关系的两个表之间的数据