План виконання з декількома відсутніми індексами


15

Якщо ви запустите запит із "Включити фактичний план виконання", план також запропонує індекси, яких немає. Деталі індексу знаходяться всередині MissingIndexesтегу в XML. Чи існує ситуація, коли план включає кілька пропозицій щодо індексів? Я пробував різні запити sql, але не міг придумати жоден запит, який генерує два чи більше відсутніх індексів.

Відповіді:


27

Оптимізатор запитів на SQL Server може вносити кілька пропозицій про відсутні індекси для окремих запитів. Однак частина студії управління SQL Server (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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.