找到匹配的速度会更快:迭代列表,还是执行JPQL查询?当然,平均而言,这也取决于匹配在列表中的位置。答案取决于列表大小吗?
示例:找到名称为“Joe”(唯一名称)
的人员JPQL:
TypedQuery<Person> q = em.createQuery( "SELECT p " +
"FROM Person p " +
"WHERE p.name = :name ", Person.class);
q.setParameter("name", "Joe");
return q.getResultList().size() == 1;
迭代:
for (Person p : persons) {
if ("Joe".equals(p.name)) {
return true;
}
}
return false;
答案 0 :(得分:2)
在Java或数据库中查找特定人员是否会更快取决于您的具体情况,如果您在此处遇到性能问题,那么您应该只考虑两种实现方式。
有很多事情需要考虑。一个重要的问题是,persons
在迭代示例中的来源是什么?您是否已经拥有了一个人员列表,或者您之前是否需要SELECT
数据库中的所有人员?如果你打算查询Person
表,那么你可能可能更好地抛出那个简单的where子句。
此外,如果有很多,结果的数量可能很重要。如果您的数据库中只有5个人,那么执行速度的任何差异都可能会很小,您将不会注意到。如果你有几百万,那么这些差异将被放大。
我的直觉是它可能不会对你的情况产生重大影响,你应该使用你更舒服的任何一个。如果这确实是一个性能瓶颈,那么你需要在开始担心摆弄表,索引,线程等之前对它们进行计时。