2016-03-23 7 views
3

hibernate最適化のためにuniqueResult()の前にsetMaxResults(1)を使用していますか?

ビューの最適化の観点から

session.createCriteria(Person.class) .add(Restrictions.eq("id", personId)) .uniqueResult();

を書くより

良く

session.createCriteria(Person.class) .add(Restrictions.eq("id", personId)) .setMaxResults(1) .uniqueResult();を書いていますか?最初のクエリは高速になりますか?

+0

これは下位データベースに依存し、一般的には回答できません。 jbdcロガーを使用するか、SQLログを調べて、結果のクエリの実行計画を分析します。 – Peter

答えて

7

場合によっては、結果セットの行を期待数に明示的に限定することで、データベースにヒントを与えて、より最適化されたクエリ実行計画を作成することができます。

しかし、主キーでクエリするほとんどのデータベースでは、とにかく最適なフィルタ条件であるため、追加の条件では何のメリットもありません。実際には、追加のSQLフラグメントは、冗長なフィルタ条件を破棄するdbオプティマイザによって費やされる文解析時間と時間を増加させるだけです。

+0

私はプライマリキーではなく何か他のもの、1m +行のテーブルでクエリを実行すると、かなりの時間を節約できますか?そして、時間を節約できない場合は、それに欠点はありません。とにかくそれを行うかもしれませんか? – darksmurf

+0

@darksmurf良い開発者は、自分が何をしているのか正確に知らなければ、何もしません。冗長コードを「ちょうど」と書くと、「あなたは有能なプログラマーです」という感情を正確に伝えることはできません。もちろん、この場合に改善があったとしても、**貧しい開発者のもう一つの兆候であるミクロ最適化になります。実際に重要なことに集中して、より良い結果を得ることができます。 – Kayaman

+2

@ darksmurfその場合はすべてデータベース、実際のクエリ、インデックスなどに依存します。早めに最適化しないでください。一般に、混乱しているコードは、目に見えないパフォーマンスの向上のメリットよりもはるかに大きな害を及ぼします。それを追加するとパフォーマンスが大幅に向上することがわかった場合は、コードを追加した理由をコード内のコメントに追加して文書化します。 –

関連する問題