是否有可能在不禁用整个数据库的自动创建统计信息的情况下禁用数据库中特定表的自动创建统计信息?
我有一个程序写成如下
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 .. 包含许多这样的选择和更新:
select ..
from #someTempTable t
join someOrdinaryTable t2 on ...
update #someTempTable set col1 = somevalue
Profiler 显示,在每个选择的服务器开始在#someTempTable 中收集统计信息之前,它占用了 整个 proc 执行的四分之一以上。 Proc 在 OLPT 处理中使用,应该工作得非常快。 我想将这个临时表更改为表变量(因为对于表变量服务器不收集统计信息)但是不能,因为它导致我重写所有这些过程以在它们之间传递变量以及所有此遗留 代码应该重新测试。我正在寻找替代方法如何强制服务器在收集统计信息时像表变量一样表现临时表。
P.S. 我知道统计数据很有用,但在这种情况下它没用,因为表总是包含少量记录。
最佳答案
我假设您知道自己在做什么。禁用统计信息通常不是一个好主意。无论如何:
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。
关于sql-server - 禁用在表上自动创建统计信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30903450/