web-dev-qa-db-ja.com

複数のインデックスが欠落している実行プラン

「実際の実行計画を含める」でクエリを実行すると、欠落しているインデックスも計画によって提案されます。インデックスの詳細は、XMLのMissingIndexesタグ内にあります。プランに複数のインデックスの提案が含まれている状況はありますか?別のSQLクエリを試しましたが、2つ以上の欠落したインデックスを生成するクエリを思い付くことができませんでした。

15
Giorgi

SQL Serverのクエリオプティマイザーは、個々のクエリに対して複数の欠落しているインデックスを提案できます。ただし、実行計画を視覚的に表示するSQL Server Management Studio(SSMS)の部分には、1つの欠落しているインデックスの提案しか表示されません。バグのようです。ただし、これらの複数のインデックスの候補はSSMSで表示できます。たとえば、最初の演算子のプロパティ(例:SELECT)で、 F4

Viewing multiple missing index suggestions in SSMS

また、前述したように、プランXMLまたは SQL Sentry Plan Explorer などのサードパーティツールに複数の提案が表示されます。欠落しているインデックスDMVにも複数の候補が表示されます(例 sys.dm_db_missing_index_details

この単純なクエリは、私に複数の提案をもたらしました:

USE tempdb
GO

SET NOCOUNT ON
GO

IF OBJECT_ID('dbo.t1') IS NOT NULL DROP TABLE dbo.t1
CREATE TABLE dbo.t1
(
    rowId INT IDENTITY
)
GO

IF OBJECT_ID('dbo.t2') IS NOT NULL DROP TABLE dbo.t2
CREATE TABLE dbo.t2
(
    rowId INT IDENTITY
)
GO


INSERT INTO dbo.t1 DEFAULT VALUES
GO 100000

INSERT INTO dbo.t2 DEFAULT VALUES
GO 100000



SELECT *
FROM dbo.t1 t1
    INNER JOIN dbo.t2 t2 ON t1.rowId = t2.rowId
WHERE t2.rowId = 999;

HTH

27
wBob