0

私は自分のプログラムをより速く実行できるようにしています。それが私の主な目標です。Java で書かれた私のプログラムは、3 つのテーブルからデータをフェッチします。現在、各テーブルについて、最初にこのクエリを使用して、取得するデータがあるかどうかを確認します。

    SELECT COUNT(1) FROM FOLDER WHERE parentFolderID = ? " + 
"AND status NOT IN ('RM', 'TM')"

そして、このクエリを使用して取得する場合:

SELECT folderid, foldertype, foldername, owner, description, "
        + "cabinetid, folderlevel, parentfolderid, status, lastmodified FROM folder WHERE parentFolderID = ? "
    + "AND status NOT IN ('RM', 'TM')

これはより効率的な方法ですか、それともデータを直接フェッチする必要がありますか?

4

3 に答える 3

1

あなたの質問の特別なケースでは、countクエリを避けます。-clause は同じです。whereつまり、インデックスが使用されているかどうかに関係なく、一致を見つけるrowids(見つかったデータをフェッチしない) ための物理的な「作業量」は、両方のクエリで同じです。

  1. 一致する行が見つからない場合、両方のクエリのパフォーマンス オーバーヘッドはほぼ同じであり、追加情報は提供されません。

  2. 一致する行が見つかった場合は、とにかく 2 番目のクエリが呼び出されます。最初のクエリは追加情報を提供しません。

おそらく、パフォーマンス向上の鍵は、 の値を取得する方法parentFolderIDかもしれません。データベース製品によっては、2 つの異なるクエリを 1 つに結合できるかもしれません。

于 2013-09-20T19:01:30.413 に答える
0

この質問に白黒はありません。実際のフェッチが非常に複雑なクエリになる場合は、結果があるかどうかを最初に確認することをお勧めします。

2 番目のクエリが非常に単純な場合、最終結果のサイズをいつでも取得できるため、最初にカウントを取得することは追加の (必須ではない) クエリになる可能性があります。

まったく同じクエリを実行しても意味がないことは明らかですが、値の代わりに count() を使用するだけです。(遅延読み込みとページネーションのほか、一致するすべての結果の数が必要な場合)

ただし、20 個のテーブルをテーブルに結合しposts、最終的に特定の日付よりも新しいすべての投稿が必要な場合は、指定された日付よりも新しい投稿があるかどうかを最初に確認できます。

于 2013-09-20T18:41:00.070 に答える