次の方法で共有


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

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

ms189605.note(ja-jp,SQL.90).gifメモ :
表の例は、AdventureWorks サンプル データベースに基づいています。SQL Server Management Studio で例を実行すると、実際の実行プランを表示することで、クエリ オプティマイザによって選択されたインデックスを表示できます。詳細については、「実際の実行プランを表示する方法」を参照してください。
クエリの列述語 クエリの説明と例 検討するインデックス

特定の値との完全一致

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

SELECT EmployeeID, Title 
FROM HumanResources.Employee 
WHERE EmployeeID = 228; 

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

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

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

SELECT EmployeeID, Title 
FROM HumanResources.Employee 
WHERE EmployeeID IN (288, 30, 15);

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

値の範囲

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 を指定して、非クラスタ化インデックスを作成。

参照

概念

インデックスの設計の全般的なガイドライン
付加列インデックス

ヘルプおよび情報

SQL Server 2005 の参考資料の入手