我发现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) “。您使用的是什么版本? –