首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >sql count是如何工作的?

sql count是如何工作的?
EN

Stack Overflow用户
提问于 2010-06-15 20:01:22
回答 7查看 9K关注 0票数 20

我想了解sql count到底是如何工作的。发生的是整个表扫描,还是正在读取的表的某些属性。然而,我觉得在包含大量记录的大型表的情况下,表扫描将是一种开销。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-06-15 20:12:46

通常,要么执行表扫描,要么执行索引扫描。这主要是因为在支持MVCC的引擎中,不同的事务可以看到不同的行,因此不存在同时对每个人都正确的单个“行数”。

同样,如果您有一个WHERE子句,那么where条件对于不同的客户端可能是不同的,因此它们会看到不同的数字。

如果您需要对大型表进行大量计数,请考虑将您自己的计数器存储在不同的表中。具体如何做到这一点完全取决于应用程序。

票数 14
EN

Stack Overflow用户

发布于 2010-06-15 20:13:00

这将在很大程度上取决于您正在使用的SQL实现(MS SQL Server、MySQL、Oracle、PostgreSQL等),以及它的优化器有多聪明。

它也可能取决于查询。例如,使用类似于

代码语言:javascript
复制
SELECT COUNT(primary_key) FROM table;

优化器可能意识到不需要扫描表(因为没有使用WHERE进行过滤,也不可能有任何值为NULL),只需返回表的大小即可。对于更复杂的查询(其中有过滤,或者可能出现NULL),数据库可能必须扫描表,或者它可以使用索引进行一些优化。

票数 6
EN

Stack Overflow用户

发布于 2010-06-15 20:14:24

这显然是依赖于实现的(即不同的关系数据库可能采用不同的策略)和使用依赖(即select count(*) from mytableselect count(*) from mytable where myfield < somevalue)可能使用不同的方法,即使在同一个DB中。

如果您正在尝试基于某个已由索引表示的分区来获取计数,则智能数据库将尝试单独使用索引。或者像Foxbase中使用的旧的"rushmore“。

因此,“这取决于”,但最终,如果没有更好的方法可用,是的,数据库将执行表扫描。

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

https://stackoverflow.com/questions/3044898

复制
相关文章

相似问题

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