Mar*_*lli 1 sql-server-2005 sql-server optimization statistics
我运行了一个数据库引擎优化顾问会话DTA 来优化我的数据库。
DTA 提出了一些统计建议,但是,我注意到有些包含在其他中,例如在我下面的表 ProductIcon 中:
CREATE STATISTICS [_dta_stat_172123954_1_2_3_4_5_12]
ON [dbo].[ProductIcon]
([ClassID], [SegmentID], [GroupID], [Tier1], [LanguageID], [Active])
go
CREATE STATISTICS [_dta_stat_172123954_11_1_2_3_4_5_12]
ON [dbo].[ProductIcon]
([IconTypeID], [ClassID], [SegmentID], [GroupID], [Tier1], [LanguageID], [Active])
go
Run Code Online (Sandbox Code Playgroud)
这是表定义:
IF OBJECT_ID('[dbo].[ProductIcon]') IS NOT NULL
DROP TABLE [dbo].[ProductIcon]
GO
CREATE TABLE [dbo].[ProductIcon] (
[ClassID] INT NOT NULL,
[SegmentID] INT NOT NULL,
[GroupID] INT NOT NULL,
[Tier1] VARCHAR(10) NOT NULL,
[LanguageID] SMALLINT NOT NULL CONSTRAINT [DF_ProductIcon_LanguageID] DEFAULT ((1)),
[Image] VARCHAR(50) NOT NULL CONSTRAINT [DF_ProductIcon_Image] DEFAULT (''),
[Descr] VARCHAR(100) NOT NULL CONSTRAINT [DF_ProductIcon_Descr] DEFAULT (''),
[SortOrder] INT NOT NULL CONSTRAINT [DF__ProductIc__SortO__6A358A53] DEFAULT ((1)),
[URL] NVARCHAR(512) NULL,
[LinkJSClick] NVARCHAR(512) NULL,
[IconTypeID] INT NULL,
[Active] BIT NOT NULL CONSTRAINT [DF_ProductIcon_Active] DEFAULT ((1)),
[Tier2] VARCHAR(10) NOT NULL CONSTRAINT [DF_ProductIcon_Tier2] DEFAULT (''),
CONSTRAINT [PK_ProductIcon]
PRIMARY KEY CLUSTERED
([ClassID] asc, [SegmentID] asc, [GroupID] asc,
[Tier1] asc, [LanguageID] asc, [SortOrder] asc, [Tier2] asc))
Run Code Online (Sandbox Code Playgroud)
题:
如果我确切地知道如何使用统计数据,我可能能够决定是否应该保留两者或其中之一。
有什么方法可以让我拥有这个愿景,以便我可以决定我应该保留其中的哪一个?
对于这一点,我们仍在使用 sql 2005。
该表目前没有任何其他索引,但指定以下索引缺失:
CREATE NONCLUSTERED INDEX IDX_IconTypeID_Active_INC_1_2_3_4_5_6
ON [dbo].[ProductIcon] ([IconTypeID], [Active])
INCLUDE (ClassID,SegmentID,GroupID,Tier1,Descr,Tier2)
Run Code Online (Sandbox Code Playgroud)
他们不是多余的,不。
每个统计对象都包含存储在列出的第一个列中的值的直方图。对于其余列,每个级别仅保留密度信息(无直方图)。
例如,建议的(ClassID、SegmentID、GroupID、Tier1、LanguageID、Active)统计将创建:
当列之间存在相关性时,这些密度可能很有用,但仅适用于相等谓词(并且在使用“新”基数估计器时,您将需要 SQL Server 2016 才能获得此好处。原始基数估计器默认使用此密度信息)。
您可以使用 来查看直方图和密度信息DBCC SHOW_STATISTICS。
请注意列的顺序很重要。此统计信息可以为(ClassID、SegmentID 和 GroupID)而非(ClassID、GroupID)的等式谓词提供平均密度信息。
就存储而言,统计数据相当轻量级,但您需要了解维护它们的潜在成本,尤其是在需要高采样率才能达到可接受的质量的大型表上。
如果 DTA 推荐了一项统计数据,这很好地表明该统计数据对您的工作负载中的一个或多个查询有用。我不记得 DTA 是否报告了有助于推荐的查询,但如果不是,对于上面的示例,您将在列出的所有列上查找具有相等谓词的查询。如果您真的想深入了解细节,请比较使用和不使用新统计数据的计划和基数估计的质量。
缺失的索引会在 (IconTypeID, Active) 上创建一个关联的统计数据,在 IconTypeID 上有一个直方图,以及组合的平均密度信息 (IconTypeID, Active)。
有关更多信息,请参阅以下内容: