如何摆脱警告"Operator used tempdb to spill data"



我有许多存储过程使用几乎相同的表和视图,这些表和视图已经开始运行缓慢。

我查看了其中一个的查询计划,它给了我两个警告。一个是具有聚集索引的视图上的"没有统计信息的列",该索引使用"无展开"提示进行查询。

第二个警告稍后会出现在计划中存在排序的地方:"操作员在执行期间使用 tempdb 溢出数据,溢出级别为 1...">

为了试用 sql,我编写了一个"Create"脚本,并使用它来创建第二个存储过程。我运行的新过程仍然包含相同的sql并使用相同的参数,执行时间从33秒下降到16秒。

据我所知,执行计划看起来是一样的,只是我没有收到关于排序的警告。

那么我应该在这里做什么?是否应重新编译所有存储过程?我怎样才能找出出了什么问题并防止它再次发生?

这发生在我在 Sql Azure 上的生产数据库上。我的本地 SQL Server 数据库上没有这样的问题

请使用 SORT 操作中使用的列创建一个索引。

CREATE INDEX ix2 ON SortTable INCLUDE(ColumnsUsedInTheSortSeparatedByComma) WITH(MAXDOP = 1)

创建排序操作后不应有警告,并且不应使用 TempDB。

最新更新