禁用表上的自动创建统计信息

时间:2015-06-17 22:21:39

标签: sql-server database sql-server-2008

是否有可能禁用自动创建数据库中特定表的统计信息,而不禁用自动创建整个数据库的统计信息?

我的程序如下:

create proc 
as
create table #someTempTable(many columns, more than 100)
inserting into #someTempTable **always one or two row** 

exec proc1
exec proc2
etc.

proc1,proc2 .. coontains很多选择和更新如下:

select .. 
from #someTempTable t
join someOrdinaryTable t2 on ...

update #someTempTable set col1 = somevalue

Profiler显示在每个选择服务器开始收集#someTempTable中的统计信息之前,它需要超过整个proc执行的四分之一。 Proc正在OLPT处理中使用,应该可以非常快速地工作。 我想将此临时表更改为表变量(因为对于表变量服务器不会收集统计信息)但是因为它导致我重写所有这些过程以在两者之间传递变量他们以及所有传统代码应该重新测试。我正在寻找替代方法,以便在收集统计数据的过程中,如何强制服务器在表变量中使用临时表

P.S。我知道统计数据是有用的,但在这种情况下它没用,因为表总是包含少量记录。

1 个答案:

答案 0 :(得分:3)

我假设你知道你在做什么。禁用统计信息通常是个坏主意。总之:

EXEC sp_autostats 'table_name', 'OFF'

此处有更多文档:https://msdn.microsoft.com/en-us/library/ms188775.aspx

编辑:OP澄清说他想要禁用临时表的统计信息。试试这个:

CREATE TABLE #someTempTable
(
    ID int PRIMARY KEY WITH (STATISTICS_NORECOMPUTE = ON),
    ...other columns...
)

如果您还没有主键,请使用标识列作为PK。