在多个统计信息中具有相同的列

Having the same column in multiple statistics

我似乎无法从 BOL 那里找到任何明确的答案。我有一个场景,数据库优化顾问建议我创建统计信息。这是其中几个的示例:

 CREATE STATISTICS [_dta_stat_1045578763_1_4] ON [dbo].[BillableTimeEntries]([Id], [Phase_Id]) WITH FULLSCAN
 go

 CREATE STATISTICS [_dta_stat_1045578763_1_11_4] ON [dbo].[BillableTimeEntries]([Id], [LineItem_Id], [Phase_Id]) WITH FULLSCAN
 go

我已经完成了所有建议的创建并删除了重复的统计信息,因为 this post 表示顺序无关紧要(a、b、c 列的统计信息与 b、c、a 列的统计信息相同).

我的问题是,由于第二个 CREATE STATISTICS 块包含 Phase_IdId,第二个是否覆盖第一个,或者它们是否都创建单独的统计信息以不同方式影响查询?

您可以创建统计信息并使用 DBCC SHOW_STATISTICS 命令查看它们之间的差异。 在这里 http://msdn.microsoft.com/en-us/library/ms190397.aspx 您可以了解它是如何工作的:

查询谓词包含多个相关列 当查询谓词包含具有跨列关系和依赖性的多个列时,对多个列的统计可能会改进查询计划。多列统计包含跨列相关统计,称为密度,这在单列统计中是不可用的。当查询结果取决于多列之间的数据关系时,密度可以改进基数估计。 如果列已经在同一个索引中,则多列统计对象已经存在,无需手动创建。如果列不在同一个索引中,您可以通过在列上创建索引或使用 CREATE STATISTICS 语句来创建多列统计信息。与统计对象相比,维护索引需要更多的系统资源。如果应用程序不需要多列索引,您可以通过创建统计对象而不创建索引来节省系统资源。 创建多列统计时,统计对象定义中列的顺序会影响密度估计基数的有效性。统计对象存储统计对象定义中键列的每个前缀的密度。有关密度的详细信息,请参阅 DBCC SHOW_STATISTICS (Transact-SQL)。