План выполнения с несколькими отсутствующими индексами

15

Если вы выполните запрос с «Включить фактический план выполнения», план также предложит отсутствующие индексы. Детали индекса находятся внутри MissingIndexesтега в XML. Есть ли ситуация, когда план включает несколько предложений по индексам? Я пробовал разные sql-запросы, но не смог найти ни одного запроса, который генерирует два или более отсутствующих индекса.

Гиорги
источник

Ответы:

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;

НТН

wBob
источник