首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >COUNT(*) is COUNT(1) is COUNT(pk):哪个更好?

COUNT(*) is COUNT(1) is COUNT(pk):哪个更好?
EN

Stack Overflow用户
提问于 2010-04-26 09:10:50
回答 2查看 127.7K关注 0票数 247

我经常发现这三种变体:

代码语言:javascript
复制
SELECT COUNT(*) FROM Foo;
SELECT COUNT(1) FROM Foo;
SELECT COUNT(PrimaryKey) FROM Foo;

据我所知,它们都做同样的事情,我发现我自己在我的代码库中使用这三个。然而,我不喜欢用不同的方式做同样的事情。我应该坚持哪一个?他们中有哪一个比其他两个更好?

EN

回答 2

Stack Overflow用户

发布于 2010-04-26 09:15:08

至少在甲骨文上,它们都是一样的:http://www.oracledba.co.uk/tips/count_speed.htm

票数 5
EN

Stack Overflow用户

发布于 2010-04-26 11:45:37

我感觉不同的DBMS的性能特征是不同的。这一切都取决于他们选择如何实现它。由于我在Oracle上做过大量的工作,所以我将从这个角度来讲述。

COUNT(*) -在传递给count函数之前,将整个行提取到结果集中,如果该行不为null,则count函数将聚合1

COUNT(1) -不会提取任何行,而是在WHERE匹配时,使用常量值1为表中的每行调用count。

COUNT(PK) -已索引Oracle中的主键。这意味着Oracle必须只读索引。通常,索引B+树中的一行比实际行小很多倍。因此,考虑到磁盘IOPS速率,与整行相比,Oracle可以通过一次块传输从索引中提取数倍多的行。这会导致更高的查询吞吐量。

在Oracle中,您可以看到第一个计数是最慢的,而最后一个计数是最快的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2710621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档