我有一张大桌子可用来工作。我想检查是否有一些记录的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个对象的集合。如果返回多个结果,则该方法将引发异常。