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 に答える