0

SQL Server 2012 を使用しています。クラスター化されていない単一の非キー列にインデックスを作成することと、複数の列を配置してからインデックスを作成することの違いは何ですか?

テーブルがある場合

  • 従業員ID
  • 部門ID
  • ロケーションID
  • 名前
  • 住所

単一のインデックスを作成すると

  • 従業員ID
  • 部門ID

ただの代わりに

  • 従業員ID

違いはなんですか?EmployeeID, DepartmentIDで従業員を検索していたときにインデックスを作成しましDepartmentID = Xた。SQL Management Studio の実際の実行計画ではDepartmentID、テーブルにクラスター化されていないインデックスがあったとしても、にインデックスを作成するように提案されていましたEmployeeID, DeparmentID

4

3 に答える 3

0

1つの違いは、列の順序です。

インデックスがオンになっていて(EmployeeID, DepartmentID)、クエリがフィルターのみを使用している場合DepartmentID、そのインデックスは使用されません。インデックスは左から右に機能します。

もう1つの考慮事項は、スペースとパフォーマンスです。インデックスの幅が広いほど、、、、またはが実行されたときUPDATEに更新にかかる時間が長くなります。DELETEINSERT

于 2012-11-08T19:55:36.893 に答える
0

インデックスでは、順序が重要です。最初に最大のサブセットを作成し、その後に小さなサブセットを作成します。そのため、特定の従業員の部門を探すよりも、特定の部門に属する従業員を探す可能性の方が高くなります。別の言い方をすれば、部門ごとの従業員数は、従業員ごとの部門数よりも多い可能性があります。少なくとも、検索の結果は、最初に部門ごとにグループ化される可能性があります。

したがって、単一のインデックスを からEmployeeID+DepartmentIDに変更するDepartmentID+EmployeeIDと、その提案が消えてしまう可能性があります。

詳細: http://weblogs.sqlteam.com/joew/archive/2008/02/13/60510.aspx

于 2012-11-08T19:56:49.260 に答える
0

複数の列のインデックスの先頭部分だけを検索に使用できますが、末尾部分は使用できません。

EmployeeID、DepartmentID に単一のインデックスがある場合、EmployeeID による検索、または EmployeeID と DepartmentID を一緒に検索するために使用できますが、EmployeeID を指定せずに DepartmentID を検索するために使用することはできません。これは、インデックスがクラスター化されているかどうかに関係なく同じです。

DepartmentID または EmployeeID で個別に検索する場合は、2 つの個別のインデックスを作成します。

于 2012-11-08T19:56:57.470 に答える