2010-08-31 37 views
6

我有一个sql函数返回一个表。该表通过6个或多个相当复杂的语句进行填充。一个INSERT与联盟或多个插入?

联合在一起这些声明是否更好,所以只有1插入或更好地保持分开?

还是它没有任何区别?

回答

2

在用户定义函数中,我没有看到使用某个用户的理由。 A UNION有可能比单独的陈述更受限制...

我想看看函数的细节,它的用途,因为它可能根本不需要。

+0

有可能在没有工会的情况下在单个插入中执行此操作,但它非常麻烦(相信我,我已经走了) – 2010-08-31 21:47:37

5

我只是UNION ALL他们 - 关键不存在UNION(这可能会减少重复效率),但UNION ALL

+1

ahh,工会全部,这是一个好点 – 2010-08-31 21:48:39

+1

我会试试看,因为只是“联盟”非常缓慢,不幸的是。 5行,1列,相同的值需要10秒。 'UNION ALL'只需不到1秒。谢谢你的提示! – 2013-09-25 11:23:25

5

而不是自己想想什么是我建议作为使用正确的工具提示的最佳解决方案。

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

3

其实,它确实有所作为。

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

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

就我个人而言,我会在事务中使用单独的插入。有时候,仅仅通过简单的操作就可维护性和调试方面来说比一些小的性能增益(如果有的话,取决于实际插入的行的数量)更有益处

+0

你可能会不同意,但在这种情况下,我不相信我需要交易。没有数据由于这些语句而被更新,只会呈现给用户,所以如果在整个事情完成之前记录发生变化,那对我来说并不重要。感谢您的输入。 – 2010-08-31 22:53:46

+0

好吧,这是单独插入的另一个原因,因为交易不适用它会更快... – veljkoz 2010-08-31 23:06:48

+0

我同意这一点。根据我的经验,UNION可能会不必要地减慢插入过程,因为首先创建联合所需的时间(和内存)。而且即使在需要时,交易仍然可以缠绕在单独的插入物上。如果我们讲纯粹的服务器端数据库工作,我会使用单独的插入。 – user158017 2010-09-01 02:15:06

4

我会建议单独的插入。我发现使用Union All的插入性能与单独的插入相比非常差。我尝试使用这两种方法插入大约3500条记录,单独的插入语句速度提高了4倍。 (它可能会根据插入的列数而有所不同)

+3

我同意。大约10个不同的桌子大约有1,000,000行 - 单独的插入在6秒内完成,UNION ALL在10分钟后没有完成! – 2016-06-24 11:35:56