更快:迭代列表或JPQL查询?

时间:2012-11-20 15:35:40

标签: performance jpql loops

找到匹配的速度会更快:迭代列表,还是执行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;

1 个答案:

答案 0 :(得分:2)

在Java或数据库中查找特定人员是否会更快取决于您的具体情况,如果您在此处遇到性能问题,那么您应该只考虑两种实现方式。

有很多事情需要考虑。一个重要的问题是,persons在迭代示例中的来源是什么?您是否已经拥有了一个人员列表,或者您之前是否需要SELECT数据库中的所有人员?如果你打算查询Person表,那么你可能可能更好地抛出那个简单的where子句。

此外,如果有很多,结果的数量可能很重要。如果您的数据库中只有5个人,那么执行速度的任何差异都可能会很小,您将不会注意到。如果你有几百万,那么这些差异将被放大。

我的直觉是它可能不会对你的情况产生重大影响,你应该使用你更舒服的任何一个。如果这确实是一个性能瓶颈,那么你需要在开始担心摆弄表,索引,线程等之前对它们进行计时。