2017-03-16 61 views
1

我發現MSDN說:「表變量沒有統計過」SQL Server沒有表變量的統計信息?

https://msdn.microsoft.com/en-us/library/dd535534(v=sql.100).aspx

而且下面的文章稱,SQL Server不支持甚至在SQL爲表變量統計2014

「臨時表很容易打敗表變量,因爲它們具有統計信息的能力大大提高了查詢優化的能力,SQL Server 2014中的增強功能仍然如此。」

https://www.brentozar.com/archive/2014/04/table-variables-good-temp-tables-sql-2014/

話,我與SQL Server 2014的測試,發現該表變量的統計數據,所以在SQL 2014年,現在的表變量的統計數據,對吧?

DECLARE 
@tb_table TABLE(
RowID INT IDENTITY(1,1) NOT NULL PRIMARY KEY 
,ProductName NVARCHAR(50) NOT NULL UNIQUE 
,Indate DATETIME NOT NULL DEFAULT(GETDATE()) 
,index IX_Indate NONCLUSTERED (Indate) 
); 

DECLARE 
@table_variable_id bigint 
; 
SELECT TOP 1 @table_variable_id = object_id 
FROM tempdb.sys.all_objects AS A 
WHERE parent_object_id = 0 
ORDER BY create_date DESC 

SELECT 
statistics_name = st.name 
,table_name = OBJECT_NAME(st.object_id) 
,column_name = COL_NAME(stc.object_id, stc.column_id) 
FROM sys.stats AS st WITH(NOLOCK) 
    INNER JOIN sys.stats_columns AS stc WITH(NOLOCK) 
     ON st.object_id = stc.object_id 
     AND st.stats_id = stc.stats_id 
WHERE st.object_id = @table_variable_id 

enter image description here

順便說一句,如果我們刪除行「指數IX_Indate NONCLUSTERED(銦酸)」從上面的腳本中,我們仍然可以在即使在SQL2012 SQL Server中的輸出看到兩個統計記錄。

+0

我無法複製它。在我的測試中'@table_variable_id'是負數,'sys.stats'只有正數'object_id'。 –

+0

您的SQL Server版本是2014?如果我刪除該行「,索引IX_Indate NONCLUSTERED(Indate),則該問題也可能在SQL 2012和2014中發生。 –

+0

我正在使用SQL Server 2014 Express。」SELECT @@ VERSION'返回「Microsoft SQL Server 2014(SP1 -CU7)(KB3162659) - 12.0.4459.0(X64) \t 2016年5月27日十五時33分17秒 \t版權所有(C)在Windows NT微軟公司 \t快捷版(64位)6.1 (建設7601:服務Pack 1) 「。您使用的是什麼版本? –

回答

0

我發現這篇文章在下面的語句通過伊茨克奔甘Improvements in Table Variables and Temporary Tables in SQL Server 2014

基數估計與TF 2453

最後的改進,我將在這篇文章的關注表討論 變量可用於SQL Server 2014 RTM CU3和SQL Server 2012 SP2。你可以在這裏找到描述它的支持條目。

這是一個衆所周知的事實,即SQL Server不保留統計信息 ,如表變量的直方圖和密度向量。但是,服務器確實保留了表中的行數,在某些情況下, 可以幫助優化程序做出最佳選擇。

您正在使用企業版。我認爲這解釋了它。 Kendra Little的文章說企業版更聰明。

我試着用DBCC SHOW_STATISTICS查看你看到的統計對象的詳細信息,並確認他們是否具有普通統計對象所有的數據。爲表格變量創建的統計對象應該有較少的數據,例如沒有直方圖。我手邊沒有企業版進行測試。

相關問題