9

JetデータベースをSQLServerExpress 2008 R2にアップサイジングしていて、その前にスキーマを再評価しています(1997-98年に設計されたもので、設計した人(つまり、私)はバカ!)。

私の質問は、2列の複合キーを持つN:N結合テーブルについてです。Jetでは、2列の複合キーの最初の列での結合は複合インデックスを使用しますが、2番目の列での結合は使用しないため、一般に、N:N結合テーブルが大きく、レコード数がかなり多いJetデータベースでは使用されません。 、複合インデックスに加えて、2番目の列に2番目の一意でないインデックスを追加します。

これはSQLServerでは良い考えですか?

(多分それはJetでは良い考えではありませんか?)

4

3 に答える 3

15

同じルールがSQLServerにも適用されます。(ColumnA、ColumnB)にインデックスがある場合、ColumnAまたはColumnAとColumnBのみのクエリはインデックスを使用できますが、ColumnBのみのクエリは使用できません。ColumnBだけに参加する必要がある場合は、必ずインデックスを作成する必要があります。

于 2010-08-31T20:55:41.157 に答える
5

列に複合インデックスがある場合(A,B)、シーク、範囲スキャン、並べ替え、または集計操作では、を含む式にのみ B使用できません。これは、Jet(Red)ドライバーにも当てはまるのと同じようにSQL Serverにも当てはまります(Jet Blueにも当てはまります)。他のいくつかのエンジンは、いわゆるskip scan操作でそれを使用する場合があります。

(B)したがって、答えは、単独で個別のインデックスが必要であるということです。

于 2010-08-31T20:58:38.003 に答える
4

さらに役立つように、管理スタジオを使用するSQLサーバーでは、「推定実行プランの表示」によってパフォーマンスを評価できます。インデックスと結合がどのように機能するかを示しました。

また、詳細と最適化のためにDTA(Database Engine Tuning Advisor)を使用することもできます。

于 2010-08-31T21:09:43.873 に答える