gpt4 book ai didi

sql-server - 在日期列中使用 NULL 时,多索引的 SQL Server 统计信息不正确

转载 作者:行者123 更新时间:2023-12-04 03:31:35 24 4
gpt4 key购买 nike

SQL Server 有一个索引的统计信息,该索引错误地估计了行数,这个表(和谓词)用于许多不同的查询。这会导致这些查询执行不佳,因为统计信息期望查询返回 5 行,而它返回 431268。

查询:

SELECT COUNT(BuildRecord.BuildRecordID)
FROM dbo.BuildRecord
WHERE BuildRecord.ContainedToDT IS NULL
AND BuildRecord.RfBuildRecordTypeID = 2
AND BuildRecord.IsEdited = 0

Execution Plan

昨天使用 FULLSCAN 更新了统计数据:

Statistics for the index

索引有 <1% 的碎片。

BuildRecord表中,ContainedToDT是一个NULLABLE DATETIMEOFFSETRfBuildRecordTypeID是一个NOT-NULL SMALLINTIsEdited 是 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 2019 (150) 似乎可以让我更好地估计此统计数据。

Execution plan in compatability mode 2019

强制查询使用遗留基数估计 Legacy Cardinality Estimation

关于sql-server - 在日期列中使用 NULL 时,多索引的 SQL Server 统计信息不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66711839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com