我發現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
順便說一句,如果我們刪除行「指數IX_Indate NONCLUSTERED(銦酸)」從上面的腳本中,我們仍然可以在即使在SQL2012 SQL Server中的輸出看到兩個統計記錄。
我無法複製它。在我的測試中'@table_variable_id'是負數,'sys.stats'只有正數'object_id'。 –
您的SQL Server版本是2014?如果我刪除該行「,索引IX_Indate NONCLUSTERED(Indate),則該問題也可能在SQL 2012和2014中發生。 –
我正在使用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) 「。您使用的是什麼版本? –