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

检查数据库表中是否有某些记录的最快方法?

单淳
2023-03-14
问题内容

我有一张大桌子可用来工作。我想检查是否有一些记录的parent_id等于我的传递值。目前,我实现的方法是使用“从mytable中选择count(*),其中parent_id
=:id”;如果结果> 0,则表示它们确实存在。

因为这是一个非常大的表,并且我不在乎存在的确切记录数,所以我只想知道它是否存在,所以我认为count(*)效率很低。

如何以最快的方式实现此要求?我正在使用Oracle 10。

根据hibernate技巧和窍门https://www.hibernate.org/118.html#A2

它建议这样写:

整数计数=(整数)session.createQuery(“从…中选择计数(*)”。)。uniqueResult();

我不知道uniqueResult()的神奇之处是什么?为什么会这么快?

与“从mytable中选择1,其中parent_id = passingId并且rowrum <2”相比,哪个更有效?


问题答案:

如果您对记录数量不感兴趣,则可以使用EXISTS查询:

select 'Y' from dual where exists (select 1 from mytable where parent_id = :id)

如果有记录,则返回“ Y”,否则返回“ Y”。

[就您对Hibernate的“ uniqueResult”的疑问而言-所有要做的就是在只有一个对象要返回时返回一个对象-
而不是包含1个对象的集合。如果返回多个结果,则该方法将引发异常。



 类似资料:
  • 问题内容: 我正在尝试根据特定的ID查询数据库。 如果这是第一次运行该活动,则该表将与id列一起存在,但是将不存在具有特定id的记录。如何检查该特定记录是否存在,如果不存在,则添加它?我发现有关检查特定列是否存在的很多信息,但与检查特定记录是否存在无关。 到目前为止,我已经尝试获取id列索引并检查它是否返回-1,但是由于某种原因,它实际上正在返回1。我可以在if语句中使用什么来验证尚未创建id列?

  • 我写了一个这样的方法。此方法的目的是根据数据库中发送的列,通过查询是否有记录来返回。但是,当我键入Any(X=>X.)时,我无法访问相关表的列。我应该如何编辑或添加到此方法?我对这些事情一知半解。如果你能解释一下我会很高兴的。多谢了。

  • 问题内容: 知道列表中是否存在值(列表中包含数百万个值)及其索引是什么的最快方法是什么? 我知道列表中的所有值都是唯一的,如本例所示。 我尝试的第一种方法是(在我的实际代码中为3.8秒): 我尝试的第二种方法是(速度提高2倍:我的真实代码为1.9秒): 堆栈溢出用户建议的方法(我的实际代码为2.74秒): 在我的真实代码中,第一种方法花费3.81秒,第二种方法花费1.88秒。这是一个很好的改进,但

  • 问题内容: 我必须每20秒阅读一次CSV。每个CSV都包含最小值。500至最大 60000行。我必须将数据插入Postgres表中,但是在此之前,我需要检查是否已插入项目,因为很有可能会获得重复的项目。检查唯一性的字段也已建立索引。 因此,我分块读取文件,并使用IN子句获取数据库中已有的项目。 有更好的方法吗? 问题答案: 这应该表现良好: 与这个答案密切相关。

  • 如何从java中知道在调用更新查询时记录是否被更新。我曾尝试过executeUpdate()中的返回类型int,但每当执行查询时,它都会显示1。也就是说,如果记录更改或不更改,它将返回值

  • 问题内容: 有没有一种方法可以检查我是否在最后一条记录上?谢谢 问题答案: 使用此模式来标识和处理结果的最后一行: