何时向#temp 表添加索引?

O.O*_*O.O 8 index sql-server-2008 ssms

在 SSMS 中测试存储过程时,有时会说#someTempTable____________________000000000000005B] (someField)etc上缺少索引

当我像这样将它们添加到 sp 时:

CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[#someTable] ([someField])
GO
Run Code Online (Sandbox Code Playgroud)

我似乎从未看到速度提高。所以,我经常不添加这样的索引。我应该什么时候添加这样的索引?

Ole*_*Dok 12

如果您将在查询运行期间两次或更多次使用临时表及其索引,请添加索引。

或者维护通常的索引任务,比如唯一性

如果加载到临时表中的数据已经排序,则创建具有与排序数据相同的聚集索引的临时表

考虑到 sql server 的临时表重用功能- 如果您决定在临时表上创建索引 - 尝试在 CREATE TABLE 语句中执行此操作。如果您在创建表后显式添加索引 - 它会阻止 sql server 下次重用该表


Joh*_*hnS 5

如果没有更多信息,这很难回答。一般来说,我会说,“这取决于”。

一般来说,如果索引的好处大于原始执行成本加上创建索引的成本,我会在临时表上添加索引。您必须使用 SET STATISTICS IO 作为示例进行基准测试。我还想查看添加索引前后使用的执行计划。有时推荐的索引并不是很好的推荐索引:-)