2017-03-16 35 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查看你看到的统计对象的详细信息,并确认他们是否具有普通统计对象所有的数据。为表格变量创建的统计对象应该有较少的数据,例如没有直方图。我手边没有企业版进行测试。

相关问题