0

SQL プロファイラーを使用して、Nhibernate から生成されたクエリが実行されたことを確認できました。

EXEC sp_executesql N'select ...' 

ファッション。
Nhibernateにプレーンを強制的に生成させる方法があるかどうか疑問に思っています

Select ...

代わりにステートメント。

これが必要な理由は、明らかに SQL Server がそれらに対して異なる実行計画を生成したためです。私のシナリオでは、単純な「select ...」がはるかに高速に実行されます。

-----更新----- 2012 年 11 月 30 日

私はちょうどこのリンクを見つけました

そして、人気のある回答(現在までに4票)が理由をよく説明していると思います。

だから今問題は

nhibernate を使用して、パラメーター化されたクエリではなく、ストレートなクエリを生成できますか?

4

4 に答える 4

0

セッション ファクトリの構成で、有効にすることができShowSqlます。これにより、デバッグ中に生成された SQL クエリが出力ウィンドウに出力されます。BatchSizeすべてのクエリを表示するには、必ず 0 に設定する必要があります。バッチ処理が有効になっている場合、(パフォーマンスを最適化するために) グループ化されたクエリを表示することはできません。

NHibernate Profiler は、コードをデバッグするための貴重な (しかし商用の) ツールでもあります。http://www.hibernatingrhinos.com/products/NHProf

于 2012-11-29T23:01:19.630 に答える
0

サーバーで実行計画をクリアしてから、agian を試す必要があります。

DBCC FREEPROCCACHE

または、クエリにオプション(再コンパイル)を挿入することにより、実行計画の再コンパイルを強制できます。

于 2012-11-29T23:01:46.897 に答える
0

いいえ、NHibernate は sp_executesql を使用して SQL Server にコマンドを発行しますが、これは変更できません。ただし、遅いクエリをトラブルシューティングして、パフォーマンスの問題を解決できるはずです。最初に、sp_executesql 呼び出しで指定されたパラメーターが、参照する列と同じデータ型を持っていることを確認します。

于 2012-11-30T13:57:10.113 に答える