当前位置: 首页 > 面试题库 >

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

董翰墨
2023-03-14
问题内容

情况如下:

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

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

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

例如: SELECT * FROM users;

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

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

最佳做法是什么?


问题答案:

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

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

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

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



 类似资料:
  • 数据计数用于显示数据集中的记录总数。 它执行以下两种计数 - Total-count - 记录总数。 Filter-count - 当前过滤器匹配的记录数。 数据计数方法 在继续使用数据计数之前,我们应该了解dc.dataCount类及其方法。 dc.dataCount类使用mixin来获取显示数据计数的基本功能,即 - dc.baseMixin dc.dataCount获取此mixin的所有方法

  • 基于https://logging.apache.org/log4j/2.x/manual/async.html我想使用混合同步和异步记录器的方法,以便从所有同步记录器的性能改进中获益。 基准代码: Log4j2配置正是文档中的配置(https://logging.apache.org/log4j/2.x/manual/async.html): 使用这种混合的同步/异步记录器配置,我可以每秒获得大

  • count 获取数据表中的行数count($table, $where) table [string] 表名. where (optional) [array] WHERE 条件.count($table, $join, $column, $where) table [string] 表名. join [array] 多表查询. column [string] 需要统计的字段. where (op

  • count 获取数据表中的行数count($table, $where) table [string] 表名. where (optional) [array] WHERE 条件.count($table, $join, $column, $where) table [string] 表名. join [array] 多表查询. column [string] 需要统计的字段. where (op

  • 问题内容: 参考这个问题: 在一列中获取项目及其值的计数 我如何在单个查询中获得记录计数的百分比,如下所示: 谢谢 问题答案: 给你总数。 编辑 但是实际上,您需要对该列中的值求和。

  • 八月迎来了秋招第一个面试,答得稀啪烂 1.自我介绍 2.学习前端时长 3.对未来的规划 4.异步输出(宏任务微任务) 5.事件循环 6.promise三种状态 7.CSS选择器权重 8.伪类和伪元素 9.作用域和作用域链 10.垃圾回收机制 11.内存泄漏及检测方法 12.数组扁平化去重并排序(手撕) 13.求最长有效匹配括号子串的长度(讲思路,时间复杂度和空间复杂度) 反问 1.技术栈 2.可能