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


15

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

回答:


27

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.