2009-05-07 2 views
1

NHibernate/HibernateなどのORMを使用する場合、データベースインデックスの作成と保守にどのようなアプローチがありますか。ORMとデータベースインデックス

ORMはクエリを生成しているので、それらのクエリプランを分析して作成する必要のあるインデックスの種類を提案できるツールはありますか?

私の現在のアプローチは...何かが遅くなるまで待ってからゆっくりとしたクエリを見つけて最適化するのですが、これは色んなことではありませんか?私の目標は、何も実際にシステムで使用されているものとそうでないものが何もわからない数十または数百の索引で終わることではありません。だからインデックスメンテナンス。

私の環境では、私は、インデックスを必要とする列は、通常「明白」であることを見つけるのNHibernate + SQL Server 2005の

答えて

1

です。これは、「pをPerson pから選択します.p.surname =:surname」のようなクエリを作成した場合、姓が参照するものはインデックスが必要です。

同様に、すべての外部キーにインデックスを付ける必要があります。

パフォーマンスが実際に問題になるまで待つことはありません。インデックスは、私が最初からやっていることです。

私が追加したかったことは、ほとんどの(すべてではないにしても)ほとんどのORMがステートメントロギングを有効にすることでした。これらはしばしば特に読めるものではありません(単一行、t0、t1、t2などのテーブル名)が、どのクエリが実行されたか、どのくらいの頻度で実行されたかを知ることができます。

+0

データベースには何百ものインデックスが定義されてしまいたくないので、かなりの数のクエリがあり、各「明白な」フィールドのインデックスを作成するのは意味がありません。私が望むのは、実際には遅いものにインデックスを付けることです。あるいは、各クエリを個別に最適化するのではなく、複数のクエリに役立つ組み合わせインデックスを使用します。すべてのクエリは、実行中にデータベースごとに1つのインデックスのみを使用できます。 –

+0

テーブルごとに1つのインデックスが必要です。 –

0

ORMを使用しているかどうかに関係なく、低速クエリ/不良インデックスの分析に使用する標準ツールが適用されます。 SQL Serverプロファイラを使用して、データベースに対して実行中のSQL文を調べ、SQL Server管理スタジオ/ SQLクエリアナライザのクエリウィンドウでインデックスプラン機能を使用して、クエリプランの詳細を確認し、アイデアを得ることができますあなたが追加する必要があるインデックスです。

SQL管理スタジオでデータベースエンジンチューニングアドバイザーを使用することもできますが、そのツールが実際にはデータベース設計やクエリパターンについて考えるのに時間がかかりすぎるのかどうかは疑問の余地がありません。

関連する問題