Sql-Server
獲取 MS SQL Server 中列的 NULL 統計資訊
在 MS SQL Server 2005 中,如何提取有關給定列的 NULL 分數(或 NULL 計數)的統計資訊?
Oracle 和 PostgreSQL 都有相同的資訊,聽說 MS SQL 也有統計資訊,但不知道在哪裡可以找到。Google沒有太大幫助。
我希望我會聽到類似的東西
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 中顯示,以便以程式方式解析)範常式式碼
/*Create temporary stored procedure with query of interest*/ CREATE PROC dbo.#plan_test AS SELECT * FROM master..spt_values WHERE low IS NULL GO /*Generate an execution plan*/ SET FMTONLY ON EXEC dbo.#plan_test SET FMTONLY OFF; /*Retrieve the plan and parse the estimated rows*/ WITH XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/showplan' as sql) SELECT query_plan.value('(//sql:StmtSimple[1]/@StatementEstRows)[1]', 'float') AS EstimatedNumberOfRows FROM sys.dm_exec_cached_plans CROSS APPLY sys.dm_exec_sql_text(plan_handle) CROSS APPLY sys.dm_exec_query_plan(plan_handle) WHERE sys.dm_exec_sql_text.objectid=OBJECT_ID('tempdb.dbo.#plan_test') AND sys.dm_exec_sql_text.dbid=2 DROP PROC dbo.#plan_test