Plan d'exécution avec plusieurs index manquants

15

Si vous exécutez une requête avec «Inclure le plan d'exécution réel», le plan suggérera également les index manquants. Les détails de l'index sont à l'intérieur de la MissingIndexesbalise dans le XML. Y a-t-il une situation où le plan comprend plusieurs suggestions d'index? J'ai essayé différentes requêtes SQL mais je n'ai pas pu trouver de requête qui génère deux ou plusieurs index manquants.

Giorgi
la source

Réponses:

27

L'Optimiseur de requête dans SQL Server peut faire plusieurs suggestions d'index manquantes pour des requêtes individuelles. Cependant, la partie de SQL Server Management Studio (SSMS) qui affiche visuellement les plans d'exécution n'affiche qu'une seule suggestion d'index manquant; cela ressemble à un bug. Cependant, ces multiples suggestions d'index sont visibles dans SSMS, par exemple dans les propriétés du premier opérateur (par exemple SELECT), appuyez sur F4.

Affichage de plusieurs suggestions d'index manquantes dans SSMS

Comme vous l'avez également noté, plusieurs suggestions sont visibles dans le plan XML ou dans des outils tiers tels que SQL Sentry Plan Explorer . Plusieurs suggestions seront également visibles dans les DMV d'index manquants (par exemple sys.dm_db_missing_index_details )

Cette simple requête a abouti à plusieurs suggestions pour moi:

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

wBob
la source