2016-11-07 15 views
2

hibernateのようなORMフレームワークはRDBMSのデータにアクセスしたり変更したりする作業を単純化しますが、遅延読み込み、キャッシングなどの機能も、適切に使用するとアプリケーションのパフォーマンスが向上します。
しかし、私が考えているのは、クエリジェネレータまたはオプティマイザが最適なクエリを使用していない場合です。たとえば、結合中にテーブルを適切に並べ替えて、最適な結合方法などを使用しないとします。
クエリは、デフォルトで生成しているものよりも最適な、より良いクエリを生成するために、休止状態と言います。Hibernateが最適なクエリを生成しないとき。 hibernateが最適なクエリを生成する方法

(私は間違っていないよ、おそらく場合は、この質問はまた、iBATISのなどのような他のORMフレームワークに適用されます)S. Bhattacharjeeからの回答を以下

EDIT - 私はまた、Hibernateが最適な状態を生成することを望んでいるだろうクエリ。しかし、Oracle GUIでOracle SQL Executorを使用していても、Optimizerが最適なプランを使用しない場合があります。しかし、私はより具体的に質問を書くことによってそれに影響を与えることができます。 (私はSQLの専門家ではないので、システムの柔軟性と最適化がフレームワークのために制限されないようにするために、このケースを分析する必要があります)。したがって、
ケース1 - 休止状態が最適なクエリを生成していないと考えてください。どのように最適なクエリを生成するためにそれに影響を与える。
ケース2 - hibernateが最適なクエリを生成しています。しかし、SQLエンジンは最適ではない計画を使用しています。クエリとプラン(または実行)は私の理解とは異なります。これが有効なケースかどうかはわかりません。該当しない場合は無視してください。しかし、誰かが答えることができない場合でもこれが有効なケースだと思うなら、この点を強調するコメントを残しておいてください。

次は、Hibernate query generatorについて書かれています - もう一つの質問が私の頭に浮かびます。 HibernateはDBの論理構造を知っていますか(とにかく物理的な設計を知っているとは思っていません。
a)論理DBデザインを知っている場合、それについてどのように知っていますか?
b)論理DB設計がわからない場合、どのようにしてクエリが最適であるかを確かめることができます。

答えて

3

私の意見では、hibernateは良い最適なクエリを生成します。あなたが言っている根拠をもっと明確にしてください。しかし、あなたが望むならあなた自身のSQLクエリを書くかもしれません。以下は、非常に小さな例あなたは休止状態に持っている自信の素晴らしい

Query query = session.createSQLQuery("select c.codename from 
codes c where c.code = :paramcode") 
.setParameter("paramcode", "900"); 
List result = query.list(); 
+0

ですが、私はまだ少なくとも理論的には、クエリー生成に休止状態に影響を与えることが可能であるならば、それを見てみたいです。私はネイティブの続編コードを追加することを認識していますが、それは私がここで探しているわけではありません。 – samshers

+0

ありがとうございます、私はまたこれが楽しみです何かが来るのを楽しみにしています! –

関連する問題