gpt4 book ai didi

sql - 包装一个 sql 查询来做一个行计数查询是不是很好

转载 作者:行者123 更新时间:2023-12-01 05:08:06 25 4
gpt4 key购买 nike

给定一个任意的 sql 查询:

select foo from bar

这个sql查询可以很复杂,那么我想知道这个查询的记录大小,所以我就这样包装:
select count(*) from (select foo from bar)  t

我应该这样做吗?除了仅使用 count(*) 之外,我是否应该依靠某些索引列?

编辑:

抱歉忘了提这个: 性能是我最关心的问题 .

最佳答案

COUNT(*) 是计算行数的最快方法,因为除此之外它什么都不做。

如果用 COUNT(col) 替换它,无论 col 是否被索引,dbms 都必须检查 col 中的每个值是否为空,因为空值不计算在内。所以这不能比 COUNT(*) 快。如果 col 不可为空,dbms 可能会注意到这一点并跳过空测试。然后你又回到了 COUNT(*) 所做的事情。

所以你总是使用 COUNT(*)。当您想计算非空出现的次数时,您只会使用 COUNT(col) - 或 COUNT(DISTINCT col) 来计算不同的值。

(顺便说一句:你也不会使用 COUNT(1),因为在这里你告诉 dbms 为每个记录“创建”一个 1 并测试它是否为空。嗯,1 永远不会为空,所以即使是最简单的 dbms 通常也会注意到这一点并跳过null 测试。但是为什么不首先写 COUNT(*) 呢?)

关于sql - 包装一个 sql 查询来做一个行计数查询是不是很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26990217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com