根据JPA查询,查找是否存在至少一条具有给定条件的记录,哪一条更有效(性能)?
A)
boolean notFound = entityManager
.createQuery("SELECT f.id FROM Foo f WHERE f.active = true")
.setMaxResults(1)
.getResultList()
.isEmpty();
B)
boolean notFound = entityManager
.createQuery("SELECT COUNT(f.id) FROM Foo f WHERE f.active = true")
.getSingleResult() == 0
答案 0 :(得分:3)
如果你有超过一小部分的Foo记录,你的数据库支持像LIMIT子句,并且JPA impl足够聪明地使用它,并且DB认为它等同于EXISTS查询,那么选项1应该超越选项2。
这是一个不错的explanation。