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

计算查询行的最有效方法

孙承
2023-03-14
问题内容

我正在使用Hibernate检索特定查询的行数。假设我有一个名为“ Person”的表,其中包含各种列。这些列之一是“名称”。

如果我想获得带有“安德鲁”名字的人数,以下哪种方法最有效?假设某些/全部之间存在性能差异。使用Hibernate / SQL是否有更好的方法?

(1)选择所有列

Query query = session.createQuery("from Person where name= :name");
query.setParameter("name", name);
List result = query.list();
int count = result.size();

(2)仅选择名称列

Query query = session.createQuery("select name from Person where name= :name");
query.setParameter("name", name);
List result = query.list();
int count = result.size();

(3)在查询中使用Count

Query query = session.createQuery("select count(*) from Person where name= :name");
query.setParameter("name", name);
long count = (Long) query.uniqueResult();

(4)在查询中的名称列中使用Count

Query query = session.createQuery("select count(name) from Person where name= :name");
query.setParameter("name", name);
long count = (Long) query.uniqueResult();

编辑:对不起,我列表中有两个数字3


问题答案:

如果只想计算行数,则不要检索结果集,这仅意味着无用的开销:

  • 您会得到比实际需要更多的东西(无论是选择所有列还是仅选择一个列)
  • 您需要通过电线发送它们
  • 您将不需要创建任何实例(无论是完整Person实体还是只是一个实例String)。

换句话说,如果您只想计数,而不是在Java方面这样做,那么DBMS已针对此任务进行了优化,并且会做得更好。

这不包括(1)和(2)。

关于(3)和(4),请注意count(*)count(col)通常存在区别:

  • count(*)计算 所有
  • count(col)计算具有 非空 值的行col

因此,如果它们col可以为NULL(count(*)更快),它们将在性能和查询结果上给出不同的结果,否则性能相同。

我会用(3)。



 类似资料:
  • 我是Azure Cosmos DB的新手,由于一些冲突的留档,我正在努力解决这个问题。 我有一个容器,包含JSON数据。 每个JSON文档都有一个名为opcos的根级数组,它可以包含N个GUIDS(通常少于5个)。 这些 opcos GUID 是指作为 ID 或单独文档的子项。 如果父文档链接到子文档,则我需要检查子文档在其 opcos 节点中是否有更多子项。 获取所有相关项目的最佳方式是什么,可

  • 问题内容: 我想测试某个代码段执行的SQL查询越少越好。 似乎有其自己的方法,它将做到这一点。但是由于我没有修补ActiveRecord,所以对我来说没什么用。 RSpec或ActiveRecord是否提供任何官方的公开方式来计算在代码块中执行的SQL查询的数量? 问题答案: 我认为您通过提及回答了您自己的问题,但是这里有: 我建议您看一下后面的代码,并使用它来构建自己的方法,该方法可用于计算查询

  • 我需要使用这个设置计算CRC-64到这个精彩的网站:http://www.sunshine2k.de/coding/javascript/crc/crc_js.html 正如您所看到的,我需要“Input Reflected”,这意味着我需要颠倒任何字节的位顺序(有点烦人)。目前,我使用一个查找表(例如0x55->0xAA)实现了这一点,但我想知道CRC是否有任何属性可以用来提高效率。 这是我的代

  • 本文向大家介绍Postgresql查询效率计算初探,包括了Postgresql查询效率计算初探的使用技巧和注意事项,需要的朋友参考一下 摘要 关系数据库很重要的一个方面是查询速度。查询速度的好坏,直接影响一个系统的好坏。 查询速度一般需要通过查询规划来窥视执行的过程。 查询路径会选择查询代价最低的路径执行。而这个代价是怎么算出来的呢。 主要关注的参数和表 参数:来自postgresql.conf文

  • 假设我们有2个常数 为了简化问题,我们假设变量< code>i总是在范围< code>[INT64_MIN*B/A,INT64_MAX*B/A]内,这样算术运算(1)的最终结果不会溢出(即:< I >适合在范围< code>[INT64_MIN,INT64_MAX]内)。 此外,假设更可能在友好范围内,范围1=

  • 本文向大家介绍MySQL的查询计划中ken_len的值计算方法,包括了MySQL的查询计划中ken_len的值计算方法的使用技巧和注意事项,需要的朋友参考一下 key_len的含义 在MySQL中,可以通过explain查看SQL语句所走的路径,如下所示: 其中,key_len表示使用的索引长度,是以字节为单位。在上面的例子中,由于int型占用4个字节,而索引中只包含了1列,所以,key_len是