可以在#temp表上创建主键来提高proc速度吗?

时间:2011-07-28 01:15:22

标签: sql tsql sql-server-2008 temp-tables

如果在大型#temp表上创建主键, 或许还有其他一些指标,潜在的速度优势是什么?潜在的减速是什么?

使用大型#temp表通常是个好主意吗?

我在另一个stackoverflow问题中看过一篇文章, http://www.sqlteam.com/article/optimizing-performance-indexes-on-temp-tables, 但它没有给出太多解释。

2 个答案:

答案 0 :(得分:4)

指标(包括主键的隐式索引)对于临时表和对于普通表的用法相同。也就是说,如果他们可以在查询中使用它们。 (实际上,查询计划程序可能会选择忽略索引,并且仅在小扫描上的索引很大程度上被浪费了。)

但是,由于查询计划派生时的警告等,它并不像以后在临时表上使用create index那么简单。本文中的文章讨论了通过使用主键和UNIQUE创建的隐式索引来指定表模式中索引的方法 - 这样可以确保查询计划程序“看到”这些额外信息。

(请注意,该文章是在2004年编写的; SQL Server 2008可能没有同样的问题。我不知道。无论如何,获取所需结果是一个[聪明]技巧。)

索引的负面效果与索引相同 - 索引会导致索引的创建/维护带来更多开销,并且在次优情况下可能会使查询计划程序混淆。因此,创建的索引应基于使用模式,并支持基准/查询分析。

快乐的编码。

答案 1 :(得分:1)

作为一般规则,如果要对该表进行大量查询,请创建索引。如果您要插入或删除记录,则不要。

无论如何,使用和不使用索引测试表并在使用后比较结果将是您回答问题所需的全部内容:)