一个INSERT UNIONS或多个INSERTS?

时间:2010-08-31 21:33:53

标签: sql sql-server sql-server-2005 tsql

我有一个返回表的sql函数。该表通过大约6个相当复杂的陈述填充。

对于UNION来说这些声明是否更好,所以只有一个插入或者这些插入是否更好?

或者它没有任何区别?

6 个答案:

答案 0 :(得分:6)

我只是UNION ALL他们 - 关键是没有UNION(通过重复数据删除可能效率较低),但是UNION ALL

答案 1 :(得分:5)

相反,要自己思考什么是我建议使用正确工具的最佳解决方案。

在使用Managment Studio的SQL Server中,您可以按Display Estimated Execution Plan评估性能。因此,通过这种方式,您可以真正看到两种情况之间的差异,并通过观察结果选择最佳情况。

答案 2 :(得分:4)

实际上,它确实有所作为。

当您有单独的INSERT时,您必须注意在事务中执行此操作,以便始终保持一致的状态。但是,由于它们是分开的,因此服务器完成所需的内存量较少,因为每个INSERT都有自己的结果集 - 当查询完成时,服务器可以自由执行另一个查询等... < / p>

当你在UNION ALL加入一个大查询中的所有内容时,服务器将需要更多临时表和更多内存来完成。但是,通过这种方式,您可以使用“批量”插入内容,并且可以加快插入速度。

就个人而言,我会在事务中使用单独的插入。有时只是简单地完成某些事情在可维护性和调试方面比一些较小的性能增益(如果有的话,取决于实际插入的行数)更有益

答案 3 :(得分:4)

我会建议单独插入。我发现与单独的插入物相比,使用Union All的插入物的性能非常差。我尝试使用这两种方法插入大约3500条记录,单独的插入语句快4倍。 (它可能会因插入的列数而异)

答案 4 :(得分:2)

在用户定义的功能中,我没有看到使用其中一个的理由。 UNION有可能比单独的陈述更具约束力......

我想查看该功能的详细信息及其用途,因为它可能根本不需要。

答案 5 :(得分:0)

UNION v / s UNION ALL在功能上不相同。 使用UNION时请格外小心,因为它会尝试进行重复数据删除,并且可能不是您最初想要的结果。

关于这个问题,鉴于记录数量少于INSERT,因此多个UNION ALL可能会更快