0

これはここでの質問に関連する質問です。私の質問はむしろ Java アプリケーションの観点からのものです。取得できるクライアントに応じてデータベースからデータを返す Web サービスがある場合、データベースを最適にクエリする方法を教えてください。

  • Javaコードで列とフィルタ値の最大セットで選択を行うのは理にかなっていますか?
  • それとも、多くの SQL PreparedStatements/NativeQueries を構築する方が良いでしょうか?それぞれが実際に返される列のみを要求しますか?
  • 結合されたテーブルのみによって決定され、選択された列によって決定されない基本的なクエリを構築するための良い妥協点はありますか (これらはすべてです)?

データベースと保守可能なアプリケーションの両方にとって何が良いでしょうか? 現時点でわかっていること:

  • ほとんどの JDBC ドライバー/SQL データベースは、SQL クエリを最適化し、将来の要求のために最適化されたバージョンをキャッシュします。すべての新しいクエリを分析して比較し、最適化されたバージョンを見つけて作成する必要があります...そしてメモリに保持します...最悪の場合、すべての新しいバリアントが新しい最適化されたバージョンを生成します。これらの単純な選択で最適化されたバージョンは同じになりますか?
    select name, surname from person
    select name from person
  • 選択の多くのバリアントを書くのは醜いです-すべてのバリアントをテストし、維持し、高速にする必要があります...
4

2 に答える 2

1

いいえ、時期尚早の最適化ではありません。関心のある列のみをフェッチします。関心のない列をフェッチすると、ネットワーク ラウンド トリップが増加し、パフォーマンスに影響します。

余分な列をフェッチすると、インデックスのみへのアクセスが必要な場合に、データベースがテーブルへのアクセスを排除する可能性も回避できます。

于 2012-12-20T19:32:50.433 に答える
0

場合によりますが、一般的には、パフォーマンスの観点から、データベースでフィルター処理することが最善です。これが複雑すぎる場合は、読みやすさの観点から、クライアント レベルで行う方がよい場合があります。

于 2012-12-20T19:06:53.940 に答える