Sql-Server

重疊的多列統計資訊是多餘的嗎?

  • May 13, 2016

我執行了一個數據庫引擎優化顧問會話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) 的平均密度資訊。

有關詳細資訊,請參閱以下內容:

引用自:https://dba.stackexchange.com/questions/138378