重疊的多列統計資訊是多餘的嗎?
我執行了一個數據庫引擎優化顧問會話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
這是表定義:
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))
題:
如果我確切地知道如何使用這些統計數據,我可能能夠決定是否應該保留兩者或其中之一。
有什麼辦法可以讓我擁有這個願景,以便我可以決定我應該保留哪些?
對於這個,我們仍然使用 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)
它們不是多餘的,不。
每個統計對像都包含儲存在第一個列出的列中的值的直方圖。對於其餘列,每個級別僅保留密度資訊(無直方圖)。
例如,關於(ClassID、SegmentID、GroupID、Tier1、LanguageID、Active)的建議統計資訊將創建:
ClassID 值的直方圖
密度數:
- 類 ID、段 ID
- ClassID、SegmentID、GroupID
- ClassID、SegmentID、GroupID、Tier1
- ClassID、SegmentID、GroupID、Tier1、LanguageID
- ClassID、SegmentID、GroupID、Tier1、LanguageID、Active
當列之間存在相關性時,這些密度可能很有用,但僅適用於相等謂詞(在使用“新”基數估計器時,您需要 SQL Server 2016 才能獲得此好處。原始基數估計器預設使用此密度資訊)。
您可以使用 來查看直方圖和密度資訊
DBCC SHOW_STATISTICS
。注意列的順序很重要。該統計數據可以為(ClassID、SegmentID 和 GroupID)上的相等謂詞提供平均密度資訊,但不能為(ClassID、GroupID)提供平均密度資訊。
就儲存而言,統計數據非常輕量級,但您需要了解維護它們的潛在成本,尤其是在需要高采樣率才能達到可接受質量的大型表上。
如果 DTA 推荐一個統計數據,這很好地表明該統計數據對您工作負載中的一個或多個查詢很有用。我不記得 DTA 是否報告有助於推薦的查詢,但如果不是,對於上面的範例,您將在列出的所有列上查找具有相等謂詞的查詢。如果您真的想深入了解細節,請比較使用和不使用新統計的計劃質量和基數估計。
缺少的索引將在 (IconTypeID, Active) 上創建相關統計資訊,在 IconTypeID 上具有直方圖,以及組合 (IconTypeID, Active) 的平均密度資訊。
有關詳細資訊,請參閱以下內容: