验证统计的重要性?具有自动创建统计信息的数据库有效吗?

Mar*_*lli 5 sql-server-2005 sql-server statistics

在 SQL Server 2005 上工作时,我想使用数据库引擎优化顾问来帮助我优化我的网络服务器。

我做的第一件事是创建一个服务器端配置文件跟踪并运行它大约一个小时。

这是生成的跟踪文件。

当我在 DTA 上使用这个文件时,我得到以下建议:

在此处输入图片说明

建议翻译成下面的脚本,评论在那里,因为我仔细检查了索引建议。

CREATE STATISTICS [_dta_stat_2108846875_3_6] ON [dbo].[ProductBulletPoint]([LanguageId], [NoteTypeCode])


CREATE NONCLUSTERED INDEX [_dta_index_ProductBulletPoint_39_2108846875__K6_K1_K3_2_4_5_7] ON [dbo].[ProductBulletPoint] 
(
    [NoteTypeCode] ASC,
    [Tier1] ASC,
    [LanguageId] ASC
)
INCLUDE ( [SeasonItemId],
[SortOrder],
[NoteText],
[NoteGroup]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]


--SP_HELPINDEX9 'ProductBulletPoint'
-- the index [_dta_index_ProductBulletPoint_39_2108846875__K6_K1_K3_2_4_5_7]  is ok to implement

CREATE NONCLUSTERED INDEX [_dta_index_ProductShipTax_39_745366020__K7_K5_K2_K3_K1_K4_6] ON [dbo].[ProductShipTax] 
(
    [TaxRegionId] ASC,
    [ItemNo] ASC,
    [DateFrom] ASC,
    [DateTo] ASC,
    [ProductShipTaxID] ASC,
    [TaxRate] ASC
)
INCLUDE ( [TaxCode]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]


--SP_HELPINDEX9 'ProductShipTax'
-- the index [_dta_index_ProductShipTax_39_745366020__K7_K5_K2_K3_K1_K4_6]



CREATE NONCLUSTERED INDEX [_dta_index_SiteRewriteCache_39_1481368642__K9_K10_2] ON [dbo].[SiteRewriteCache] 
(
    [StartDate] ASC,
    [EndDate] ASC
)
INCLUDE ( [CacheKey]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]


--SP_HELPINDEX9 'SiteRewriteCache'
-- the index _dta_index_SiteRewriteCache_39_1481368642__K9_K10_2 is ok to be implemented


CREATE STATISTICS [_dta_stat_89363683_3_2_4] ON [dbo].[ProductClassSegGroupT1]([GroupID], [SegmentID], [Tier1])

CREATE STATISTICS [_dta_stat_89363683_6_2_4] ON [dbo].[ProductClassSegGroupT1]([GenderCode], [SegmentID], [Tier1])

CREATE STATISTICS [_dta_stat_89363683_1_2_3_4_5] ON [dbo].[ProductClassSegGroupT1]([ClassID], [SegmentID], [GroupID], [Tier1], [SortOrder])

CREATE STATISTICS [_dta_stat_89363683_1_4_2] ON [dbo].[ProductClassSegGroupT1]([ClassID], [Tier1], [SegmentID])

CREATE STATISTICS [_dta_stat_473365051_3_4_2_1] ON [dbo].[ProductImages]([Language], [Tier1], [SeasonItemID], [ProductImageID])

CREATE STATISTICS [_dta_stat_473365051_2_1_3] ON [dbo].[ProductImages]([SeasonItemID], [ProductImageID], [Language])

CREATE STATISTICS [_dta_stat_745366020_4_7] ON [dbo].[ProductShipTax]([TaxRate], [TaxRegionId])

CREATE STATISTICS [_dta_stat_745366020_4_5_7_3_2] ON [dbo].[ProductShipTax]([TaxRate], [ItemNo], [TaxRegionId], [DateTo], [DateFrom])

CREATE STATISTICS [_dta_stat_745366020_7_1_4_5_2_3] ON [dbo].[ProductShipTax]([TaxRegionId], [ProductShipTaxID], [TaxRate], [ItemNo], [DateFrom], [DateTo])

CREATE STATISTICS [_dta_stat_745366020_5_3_2_1] ON [dbo].[ProductShipTax]([ItemNo], [DateTo], [DateFrom], [ProductShipTaxID])

CREATE STATISTICS [_dta_stat_745366020_3_7_5] ON [dbo].[ProductShipTax]([DateTo], [TaxRegionId], [ItemNo])

CREATE STATISTICS [_dta_stat_745366020_1_5_2] ON [dbo].[ProductShipTax]([ProductShipTaxID], [ItemNo], [DateFrom])

CREATE STATISTICS [_dta_stat_745366020_2_7] ON [dbo].[ProductShipTax]([DateFrom], [TaxRegionId])

CREATE STATISTICS [_dta_stat_745366020_1_7_5_2] ON [dbo].[ProductShipTax]([ProductShipTaxID], [TaxRegionId], [ItemNo], [DateFrom])

CREATE STATISTICS [_dta_stat_1033367046_6_2_1_8] ON [dbo].[ProductURL]([Tier1], [ClassID], [ProductURLID], [Tier3])

CREATE STATISTICS [_dta_stat_1033367046_8_9_6_2_1_3_4_7] ON [dbo].[ProductURL]([Tier3], [LanguageID], [Tier1], [ClassID], [ProductURLID], [SegmentID], [GroupID], [Tier2])

CREATE STATISTICS [_dta_stat_1033367046_1_3_4_7] ON [dbo].[ProductURL]([ProductURLID], [SegmentID], [GroupID], [Tier2])

CREATE STATISTICS [_dta_stat_1033367046_6_2_1_3_4_7_8] ON [dbo].[ProductURL]([Tier1], [ClassID], [ProductURLID], [SegmentID], [GroupID], [Tier2], [Tier3])

CREATE STATISTICS [_dta_stat_1481368642_10_9] ON [dbo].[SiteRewriteCache]([EndDate], [StartDate])
Run Code Online (Sandbox Code Playgroud)

这是我有问题的数据库。您可以看到它启用了自动创建统计信息和自动更新统计信息。

在此处输入图片说明

问题

  • 为什么我要创建这么多统计信息,因为我的数据库有自动创建统计信息?

  • 我如何仔细检查它建议创建的每个统计数据是否真的有用?

对于索引,我首先查看我当前拥有的特定对象的内容,然后我决定可能会更改索引,或者使用 drop existing 创建,或者创建一个新索引,具体取决于具体情况,但我会如何继续与统计?

Pau*_*ite 8

为什么我要创建这么多统计信息,因为我的数据库有自动创建统计信息?

自动统计只能创建单列统计对象。DTA 建议的统计信息都是多列统计信息,用于捕获潜在有用(尽管有限)的相关信息。

有关详细信息,请参阅统计文档

我如何仔细检查它建议创建的每个统计数据是否真的有用?

按照通常的方式。新的统计数据可能会也可能不会改善基数估计、计划选择和性能。与任何其他 DTA 建议一样,在前后进行测试,并且只保留您发现(或期望)有益的更改。