Sql server 对于所有订购人的系统时间

Sql server 对于所有订购人的系统时间,sql-server,tsql,Sql Server,Tsql,除了将所有时态表作为传统表公开之外,为了启用审计,我将使用FOR SYSTEM\u TIME all提示分别公开所有时态表。这更容易使用,因为当前记录也可以在resultset中找到 但是,我的帐户表上的一个ORDER BY与临时的FOR SYSTEM_TIME ALL提示一起导致数据溢出到tempdb中。这是一个真正的性能杀手。我需要orderby进行分页。我还尝试了时态表和历史表的联合,并对其应用了ORDER BY,但这自然会导致相同的性能问题。有什么办法可以解决这个问题吗 下面是实际执行计

除了将所有时态表作为传统表公开之外,为了启用审计,我将使用
FOR SYSTEM\u TIME all
提示分别公开所有时态表。这更容易使用,因为当前记录也可以在resultset中找到

但是,我的帐户表上的一个ORDER BY与临时的FOR SYSTEM_TIME ALL提示一起导致数据溢出到tempdb中。这是一个真正的性能杀手。我需要
orderby
进行分页。我还尝试了时态表和历史表的
联合
,并对其应用了
ORDER BY
,但这自然会导致相同的性能问题。有什么办法可以解决这个问题吗

下面是实际执行计划。可以看到,横跨主键和句点列的索引都出现在两个表中

只需
系统所有时间

只需按
订购即可:

用于系统时间所有
订购人


在我看来,问题不是将数据溢出到光盘。这是一种结果,而不是根本原因。在第一个查询中没有orderby,因此SQLServer可以为您提供任何行。在第二个查询中,帐户上有一个支持排序的索引。在上一次查询中,数据溢出,因为在历史记录表上,
ID
上没有索引,所以SQL Server必须读取所有历史记录,才能给您一个按
ID
排序的记录。我认为在
ID
上的历史记录表中使用非聚集索引可能会有所帮助(您无法在历史记录上创建聚集索引,因为已经有了聚集索引)