Clustered Index Seek プラン表示操作

Clustered Index Seek 操作は、インデックスのシーク機能を使用してクラスター化インデックスから行を取得します。Argument 列には、使用されているクラスター化インデックスの名前と SEEK:() 述語が含まれます。ストレージ エンジンはインデックスを使用して、この SEEK:() 述語に適合する行だけを処理します。また、WHERE:() 述語を含めることもできます。この場合、ストレージ エンジンは、SEEK:() 述語に適合するすべての行が WHERE:() 述語に適合するかどうかを評価します。ただし、WHERE:() 述語は省略可能であり、処理を行うときにインデックスを使用しません。

Argument 列に ORDERED 句が含まれている場合、行をクラスター化インデックスの並べ替え順で返す必要があることが、クエリ プロセッサによって判断されます。ORDERED 句がない場合、ストレージ エンジンが最適な方法でインデックスを検索します。ただし、出力が並べ替えられるとは限りません。出力で行の順序を保持する場合、並べ替えられていない出力に比べて効率が低下することがあります。

LOOKUP キーワードを指定すると、ブックマーク参照が行われます。SQL Server 2008 では、Key Lookup 操作によってブックマーク参照機能が提供されます。

Clustered Index Seek は論理操作および物理操作です。

Clustered Index Seek 操作アイコングラフィカルな実行プランのアイコン

次の例では、クラスター化インデックスのあるテーブルから行を選択します。実行プランの出力には、クエリ オプティマイザーで指定された行を取得するために Clustered Index Seek 操作を使用することが示されています。

USE AdventureWorks2008R2;
GO
SET NOCOUNT ON;
GO
SET SHOWPLAN_ALL ON;
GO
SELECT Name
FROM Production.UnitMeasure
WHERE UnitMeasureCode BETWEEN 'Each' AND 'Inch';
GO
SET SHOWPLAN_ALL OFF;

USE AdventureWorks2008R2;
GO
SET NOCOUNT ON;
GO
SET SHOWPLAN_ALL ON;
GO
SELECT Name
FROM Production.UnitMeasure
WHERE UnitMeasureCode BETWEEN 'Each' AND 'Inch';
GO
SET SHOWPLAN_ALL OFF;

Clustered Index Seek 操作の実行プラン出力は次のようになります。

PhysicalOp

-----------------------------------------------------------------------

Clustered Index Seek

Argument

-----------------------------------------------------------------------

OBJECT:([AdventureWorks2008R2].[Production].[UnitMeasure].[PK_UnitMeasure_UnitMeasureCode]),

SEEK:([AdventureWorks2008R2].[Production].[UnitMeasure].[UnitMeasureCode] >=

CONVERT_IMPLICIT(nvarchar(4000),[@1],0) AND

[AdventureWorks2008R2].[Production].[UnitMeasure].[UnitMeasureCode]

<= CONVERT_IMPLICIT(nvarchar(4000),[@2],0)) ORDERED FORWARD