クエリの種類とインデックス

列にインデックスを作成するかどうかを検討するときは、クエリでどのように列が使用されるかを評価します。次の表では、インデックスが役に立つクエリの種類を示します。

注意

表の例は、AdventureWorks2008R2 サンプル データベースに基づいています。SQL Server Management Studio で例を実行すると、実際の実行プランを表示することで、クエリ オプティマイザーによって選択されたインデックスを表示できます。詳細については、「実際の実行プランを表示する方法」を参照してください。

クエリの列述語

クエリの説明と例

検討するインデックス

特定の値との完全一致

特定の値を含む列エントリを指定する WHERE 句を使用するクエリで完全一致を検索します。次に例を示します。

SELECT BusinessEntityID, JobTitle 
FROM HumanResources.Employee 
WHERE BusinessEntityID = 228; 

BusinessEntityID 列に非クラスター化インデックスまたはクラスター化インデックス。

IN (x,y,z) リスト内の値との完全一致

指定した値リスト内の値の完全一致を検索します。次に例を示します。

SELECT BusinessEntityID, JobTitle 
FROM HumanResources.Employee 
WHERE BusinessEntityID IN (288, 30, 15);

BusinessEntityID 列に非クラスター化インデックスまたはクラスター化インデックス。

値の範囲

2 つの値の範囲内にある値を含むエントリを指定するクエリで値範囲を検索します。次に例を示します。

SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID BETWEEN 1 and 5;

または

WHERE ProductModelID >= 1 AND ProductModelID <= 5

ProductModelID 列にクラスター化インデックスまたは非クラスター化インデックス。

表の結合

結合述語に基づき、他のテーブルの行に一致するテーブル内の行を検索します。次に例を示します。

SELECT a.ProductAssemblyID, b.Name, a.PerAssemblyQty
FROM Production.BillOfMaterials AS a
JOIN Production.Product AS b 
ON a.ProductAssemblyID = b.ProductID
WHERE b.ProductID = 900;

ProductID 列と ProductAssemblyID 列に非クラスター化インデックスまたはクラスター化インデックス。

LIKE 比較

'abc%' など、特定の文字列で始まる行を検索します。次に例を示します。

SELECT CountryRegionCode, Name 
FROM Person.CountryRegion 
WHERE Name LIKE N'D%'

Name 列に非クラスター化インデックスまたはクラスター化インデックス。

並べ替えまたは集計

暗黙の並べ替え順や明示的な並べ替え順、または集計 (GROUP BY) が必要です。次に例を示します。

SELECT a.WorkOrderID, b.ProductID, a.OrderQty, a.DueDate 
FROM Production.WorkOrder AS a
JOIN Production.WorkOrderRouting AS b 
ON a.WorkOrderID = b.WorkOrderID
ORDER BY a.WorkOrderID;

並べ替える列または集計列に非クラスター化インデックスまたはクラスター化インデックス。

列の並べ替えでは、列の並べ替え順 (昇順または降順) を指定することを検討してください。

PRIMARY KEY 制約または UNIQUE 制約

挿入操作や更新操作で重複する新しいインデックス キー値を検索して、PRIMARY KEY 制約と UNIQUE 制約を設定します。次に例を示します。

INSERT INTO Production.UnitMeasure (UnitMeasureCode, Name, ModifiedDate)
VALUES ('OZ1', 'OuncesTest', GetDate());

制約で定義された列にクラスター化インデックスまたは非クラスター化インデックス。

PRIMARY KEY/FOREIGN KEY リレーションシップでの UPDATE 操作または DELETE 操作

CASCADE オプションの有無にかかわらず、PRIMARY KEY/FOREIGN KEY リレーションシップに列が参加している更新操作または削除操作で行を検索します。

外部キー列に非クラスター化インデックスまたはクラスター化インデックス。

選択リスト内にあり、述語にはない列

選択リスト内にある、検索や照合で使用されない 1 つ以上の列を返します。次に例を示します。

SELECT Title, Revision, FileName
FROM Production.Document
WHERE Title LIKE N'%Maintenance%' AND Revision >= 0';

INCLUDE 句に FileName を指定して、非クラスター化インデックスを作成。