当SQL Server在tempdb中排序时,它是存储整行还是只存储PK?

时间:2017-08-16 09:11:34

标签: sql-server sql-server-2008

当运行需要排序的给定查询时,我们的tempdb空间已用完。我们有几个关于如何解决它的理论,但这取决于SQL Server在tempdb中存储的内容。

它是存储整行还是只存储主键?或者它也可能存储排序所需的列?

我们正在使用SQL Server 2008

1 个答案:

答案 0 :(得分:3)

这不是那么简单......排序什么?你的意思是在索引构建或查询期间?

从这个参考: https://docs.microsoft.com/en-us/sql/relational-databases/indexes/sort-in-tempdb-option-for-indexes

  

这里必须有足够的空间用于tempdb存储排序运行。   这些包括表的数据行。必须有足够的   目标文件组中的可用空间,用于存储最终索引   结构体。这包括表的数据行和索引   B-树。

所以可以将整个数据行存储在场景中,另外它可以存储索引的BTree,并且排序可能需要多次“运行”,因此它实际上可能不止于此。< / p>

你到底想要完成什么?我不明白为什么这些信息会决定你要做什么来解决它...如果确实如此,你可以通过创建一个包含大列的表来进行测试,强制排序,然后查看TempDB中使用了多少空间确认。

您是否可以通过使用正确的索引/重写查询来阻止排序?

您可能希望阅读本文并尝试以下建议:https://sqlkiwi.blogspot.com/2010/08/sorting-row-goals-and-the-top-100-problem.html