SQL Server 中的查询优化器可以为单个查询提供多个缺失的索引建议。然而,可视化显示执行计划的 SQL Server Management Studio (SSMS) 部分仅显示一个缺失的索引建议;它看起来像一个错误。然而,这些多个索引建议在 SSMS 中是可见的,例如在第一个运算符的属性中(例如SELECT),按F4。
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;
SQL Server 中的查询优化器可以为单个查询提供多个缺失的索引建议。然而,可视化显示执行计划的 SQL Server Management Studio (SSMS) 部分仅显示一个缺失的索引建议;它看起来像一个错误。然而,这些多个索引建议在 SSMS 中是可见的,例如在第一个运算符的属性中(例如
SELECT
),按F4。正如您还注意到的,在计划 XML 或SQL Sentry Plan Explorer等第三方工具中可以看到多个建议。缺失的索引 DMV 中也会显示多个建议(例如sys.dm_db_missing_index_details)
这个简单的查询为我带来了多个建议:
高温高压