快速而简单...为什么当我尝试检索临时表中某一列的统计信息时,这个 sp 会失败?
CREATE PROCEDURE dbo.Demo
AS
BEGIN
SET NOCOUNT ON
-- Declare table variable
CREATE TABLE #temp_table (ID INT)
DECLARE @I INT = 0
-- Insert 10K rows
WHILE @I < 100
BEGIN
INSERT INTO #temp_table VALUES (@I)
SET @I=@I+1
END
-- Display all rows and output execution plan (now the EstimateRow is just fine!)
SELECT * FROM #temp_table
-- Is the object there
SELECT OBJECT_ID('tempdb..#temp_table')
-- How about statistics
DBCC SHOW_STATISTICS ('tempdb..#temp_table', 'id')
END;
我不明白,我收到一条消息说没有在列 id 上创建统计信息
Could not locate statistics 'id' in the system catalogs.
话虽如此,我看过 Paul White 的一篇文章,其中使用了这种技术并且确实有效。
https://sqlkiwi.blogspot.com/2012/08/temporary-tables-in-stored-procedures.html
有任何想法吗?
您需要显式创建一个名为
id
当留给自己的设备时,系统创建的统计对象有奇怪的名字,比如
_WA_Sys_00000002_5F141958
请注意,当您创建统计信息时 -如果您希望它显示任何内容,或者可能将您的查询更改为需要更新统计信息,您需要
CREATE STATISTICS
在使用数据填充临时表之后将命令移动到,例如.SELECT * FROM #temp_table WHERE ID > 0