1

什么会更快找到匹配项:迭代列表,或执行 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;
4

1 回答 1

2

在 Java 或 DB 中查找特定人员是否会更快,这实际上取决于您的具体情况,如果您在这里遇到性能问题,您真的应该为这两种实现计时。

有很多事情需要考虑。一个重要的问题是,persons在您的迭代示例中是从哪里来的?您手头是否已经有人员名单,或者您是否必须在SELECT此之前将所有人员都从数据库中取出?如果您无论如何都要查询该Person表,那么您最好只使用那个简单的 where 子句。

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

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

于 2012-11-20T15:48:54.427 回答