一尘不染

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

hibernate

我有一张大桌子可用来工作。我想检查是否有一些记录的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”相比,哪个更有效?


阅读 344

收藏
2020-06-20

共1个答案

一尘不染

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

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

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

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

2020-06-20