在 MS SQL Server 2005 中,如何提取给定列的 NULL 分数(或 NULL 计数)的统计信息?
Oracle 和 PostgreSQL 都有同样的信息,听说 MS SQL 也有统计信息,但是不知道去哪里找。谷歌没有太大帮助。
我希望我会听到类似的话
SELECT null_frac FROM pg_stats WHERE tablename='mytab' and attname='mycol';
/* PostgreSQL, stats gathered by ANALYZE */
或者
SELECT nullcnt FROM custom_stats_table WHERE tabname='MYTAB' and colname='MYCOL';
/* Oracle, stats gathered by dbms_stats.get_column_stats */
我不是在问如何自己计算这些值——我知道该怎么做。我需要数千列的这些统计信息,并且在我正在处理的数据库上计算这将花费很长时间。我需要近似值,它们应该位于服务器中的某个位置——无论如何,基于成本的优化器都需要它们。
没有那么容易。您需要使用
DBCC SHOW_STATISTICS
并查看直方图,同时考虑到统计信息可能经过过滤或包含多列。让 SQL Server 执行它并为语句生成估计的执行计划可能更容易,
select * from foo where bar is null
然后 SQL Server 将使用适当的统计信息(如果存在)或创建它们(假设启用了自动创建统计信息选项)。然后,您可以查看进入
SELECT
迭代器的估计行数(这显示StatementEstRows
在 XML 中,以便以编程方式进行解析)示例代码
对于确切的结果,像
可能会成功(现在无法测试,这里没有 MS SQL)。显然,这将比询问统计模块更昂贵。