sql-server - 禁用在表上自动创建统计信息

标签 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 .. 包含许多这样的选择和更新:

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/

相关文章:

java - 随机选择不同的

database - Firebase Firestore的幂等计数器实现

带有转换的sql server中的sql

sql - 为指定月份的每一天选择最高值

sql-server - 跨多个事实表进行连接,中间有一个维度

sql-server - 如何从两个不同的sql server获取数据?

SQL 查询比较 2 个搜索结果之间的列

java - 监视共享文件夹的更改并拉取到数据库

database - Magento 下拉属性标签

sql-server - 无法在 SQl 2008 中创建非索引字表