2016-04-07 13 views
0

私は確かに貧弱なデータモデルで継承したアプリケーションを持っています。当分の間、私はそれにバンダイを入れようとしています。Entity.list()Hibernateのパフォーマンス

クエリされたデータのサブセット(一度に1つのレコード)で動作する操作であっても、システムに読み込まれるデータが増えるにつれてパフォーマンスが低下することに気がつきました。

私たちはNew Relicを使用していますが、私は、Criteria Queriesを使用するトランザクションでは、リクエスト時間のかなりの部分がEntityName.list()に費やされていることに気付きました。しかし、いずれの企業もlist()メソッドを持っていません。 Criteria QueriesがSQLに変換され、すべてのエンティティをリストしてからJavaオブジェクトをクエリするのではなく、実際にデータベースエンジン上でクエリが実行されることは私の理解です。それは正確ですか? New Relicのlist()メソッドは何ですか?

わかりやすいことに、巨大なテーブルにあるリスト全体またはselect * ...を実行するにはしばらく時間がかかることに気付きました。問題は、すべてのレコードを一覧表示するのではなく、条件照会を使用して表を照会することです。私の質問は、New RelicのEntity.list()への参照はどこから来たのですか?

+0

どのような 'list'メソッドでも、私は' SELECT * FROM TABLE_NAME'のようなクエリですべての行を選択していると思います。あなたのテーブルが巨大な場合、それは時間がかかるかもしれません... – jchampemont

+0

私はVisualVMまたはJprofilerを使用して、あなたが悪いと思うコードを使用し、この問題を作成者に行を見つけると考えています –

答えて

0
  • Infactは、私たちは「フィールド1を選択し、フィールド2、... ....から」と を試みるが、任意の大規模なフィールドを削除するには、単純な 改善がputingされ、一般的にリスト()メソッドを使用しないでくださいリスト(実際に必要な場合を除きます)
  • 他の影響は関係船のためです。エンティティの間に の1つまたは複数の関係がある場合、hibernateは LAZYであっても、関連船がEAGERとマークされている場合には 関連エンティティをロードします。

  • 実際にリストを取得する場合は、データ のビューベースを作成して、そのビューに一致するエンティティを作成してください。 のパフォーマンスが少し向上する可能性があります。

+0

私はリストを使用していません。リストメソッドはありません。私は、「select * ...」をしてはならないと伝えることができる基準クエリーを使用しています。 –

関連する問題