行计数估计未使用 SQL Server 2008 多列统计信息
Posted
技术标签:
【中文标题】行计数估计未使用 SQL Server 2008 多列统计信息【英文标题】:SQL Server 2008 multi columns statistics not being used by row count estimation 【发布时间】:2009-12-27 12:58:01 【问题描述】:我有一个包含 A 列和 B 列的表,它们的相关性如下:
A == 1 => B == 3
A == 2 => B == 0
A == 3 => B == 7
带有=>的意思是意味着高概率。我想这样查询:
where A = 2 and B = 3 --very few rows should match
所以我创建了 (A, B) 的统计信息。但是查询优化器完全错误地估计了行数 10 倍。有什么想法吗?联合直方图应该允许非常精确的估计。顺便说一句:基数(A)= 10,基数(B)= 5
【问题讨论】:
你可以接受更多的答案,也许 看看我问的问题。我已经接受了所有解决我问题的答案。我只是碰巧问了非常棘手的问题;-) 【参考方案1】:我怀疑优化器忽略了统计信息,因为整个查询都很重要,而不仅仅是 WHERE 子句。或者你有 SELECT *.或者采样率太低(你用了FULLSCAN吗?)
如果您创建一个具有索引统计信息的索引会怎样?是否也包含内含物以使其覆盖?
我从未创建过自己的列统计信息(除非图形查询计划提到了它)。如果我需要创建它们,索引很可能会更好地服务于我的目的
编辑:
Another SO question: SQLServerPedia article【讨论】:
我确实使用了 FULLSCAN。创建索引后,估算值会变得更好。 查询是否被索引完全覆盖?对索引进行 FULLSCAN(重建)?以上是关于行计数估计未使用 SQL Server 2008 多列统计信息的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 2008 Management Studio 的缺失索引功能
如何在 sql server 2008 的同一张表中使用计数和分组方式和自连接?
Sql Server 2008 MERGE - 获取计数的最佳方式