Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server存储过程中间表_Sql Server_Sql Server 2005_Stored Procedures - Fatal编程技术网

Sql server SQL Server存储过程中间表

Sql server SQL Server存储过程中间表,sql-server,sql-server-2005,stored-procedures,Sql Server,Sql Server 2005,Stored Procedures,在SQLServer2005中,我有一个查询,它涉及一系列大型ish连接(每个表的数量从几千行到几百万行不等,这些表的平均值可能相当于10-15列整数和日期时间 为了加快查询速度,我正在考虑将一个大查询拆分为一个存储过程,该存储过程执行两个联接,将结果存储在某个临时表中,然后将该临时表和另一个临时表联接,该临时表也是几个联接的结果 我目前正在使用表变量来存储中间表,一次性的性能明显更好。但在生产中,tempdb似乎存在IO瓶颈 有没有更好的方法来考虑解决这样的问题?我的意思是,在这里使用表变量是

在SQLServer2005中,我有一个查询,它涉及一系列大型ish连接(每个表的数量从几千行到几百万行不等,这些表的平均值可能相当于10-15列整数和日期时间

为了加快查询速度,我正在考虑将一个大查询拆分为一个存储过程,该存储过程执行两个联接,将结果存储在某个临时表中,然后将该临时表和另一个临时表联接,该临时表也是几个联接的结果

我目前正在使用表变量来存储中间表,一次性的性能明显更好。但在生产中,
tempdb
似乎存在IO瓶颈


有没有更好的方法来考虑解决这样的问题?我的意思是,在这里使用表变量是不是太离谱了?

表变量可以在TempDB中使用

在大型生产环境中,我见过比我使用标准表更好的SQL编码器;它们本质上是临时表,但它们创建为常规表,并给它们一个特殊的前缀或后缀。这还有一个额外的好处(与临时表一样),即能够利用索引来帮助执行

如果您可以使用标准表或利用复杂执行的所有步骤都可以访问的临时表,那么您就可以解决内存问题

将其视为缓存数据的地方。事实上,您可以在每次运行主存储过程时更新此“缓存”,只要确保使用适当的事务和锁定即可


想象一下另一种情况——如果您在存储过程中使用一个巨大的表变量,并且该存储过程同时执行10或20次……该表变量可能不再仅仅存在于内存中。

您能提供有关查询的更多详细信息吗?我不认为将一个基于集合的查询拆分为多个临时表es和查询会使它更快…您的执行计划看起来如何?大约涉及8个联接。执行计划非常庞大,有各种合并,并搜索和扫描各种表。您可以发布表扫描中的信息吗?我认为这些是最昂贵的?如果您使用一组强制表扫描的联接,y您可能会发现额外的一两个索引有助于提高性能。听起来您已经检查了查询的执行计划-这是否表明缺少任何索引?您也可以运行我最喜欢的索引之一或检查一些。