【发布时间】:2021-03-19 16:16:04
【问题描述】:
SQL Server 有一个关于索引的统计信息,它错误地估计了行数,这个表(和谓词)用于许多不同的查询。这会导致这些查询执行不佳,因为统计数据期望查询返回 5 行,而它返回 431268。
查询:
SELECT COUNT(BuildRecord.BuildRecordID)
FROM dbo.BuildRecord
WHERE BuildRecord.ContainedToDT IS NULL
AND BuildRecord.RfBuildRecordTypeID = 2
AND BuildRecord.IsEdited = 0
昨天使用 FULLSCAN 更新了统计数据:
索引有
在BuildRecord 表中,ContainedToDT 是一个 NULLABLE DATETIMEOFFSET,RfBuildRecordTypeID 是一个 NOT-NULL SMALLINT 和 IsEdited 是一个 NOT-NULL TINYINT。
索引如下:
CREATE NONCLUSTERED INDEX [IM_ContainedToDT_RfBuildRecordTypeID_IsEdited]
ON [dbo].[BuildRecord] ([ContainedToDT] ASC, [RfBuildRecordTypeID] ASC, [IsEdited] ASC)
INCLUDE([InvPackCreatedID], [InvPackConsumedID])
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
SQL Server 版本是 Microsoft SQL Server 2019 (RTM-CU8) (KB4577194) 兼容模式为 SQL Server 2016 (130)
任何建议或想法将不胜感激。
【问题讨论】:
标签: sql-server database-indexes