小编典典

COUNT比拉记录和计数代码快吗?

sql

情况如下:

  1. 我首先需要运行一个查询,以了解有多少条记录。

例如: SELECT COUNT(DISTINCT userid) from users;

  1. 通常,这就是所需要的。但是,有时(例如30%的时间)在第一个查询之后,用户将要运行第二个查询,详细记录。

例如: SELECT * FROM users;

是否有任何理由要SELECT COUNT最初运行而不是仅仅运行SELECT?也就是说,使SQL中的记录计数比实际拉回记录更快吗?还是无论哪种方式本质上都是相同的工作,所以我应该避免做两个查询?

换句话说,最好总是只在第一个查询中提取记录(不使用COUNT),然后对代码(Java)中的记录进行计数。如果用户想运行第二个查询,那么很好,我已经有了数据。如果不是,则将其转储。

最佳做法是什么?


阅读 401

收藏
2021-03-23

共1个答案

小编典典

如果您知道需要数据,请继续将其提取并在代码中进行计数。但是,如果只需要计数,则从数据库中提取计数要比实际检索行快得多。同样的标准做法是只拉您所需的东西。

例如,如果要计算表中的所有行,则大多数数据库实现都不需要查看任何行。表知道它们有多少行。如果查询在where子句中具有过滤器并且可以使用索引,则它不再需要查看实际行的数据,只需对索引中的行进行计数即可。

所有这一切都没有计算传输的数据量。

关于数据库速度的经验法则是继续尝试并自己尝试一下。一般规则并不总是一个好的指标。例如,如果表是10行且只有几列,那么我可能会在需要时立即将整个事情拖过来,因为两次数据库往返将超过查询的成本。

2021-03-23