2

我有一张表,需要以每小时数百万的数量填充很多行。

现在我有一个使用实体框架用 C# 开发的应用程序,它不支持批量复制。我之前开发了一个使用批量复制的解决方案,这是一个巨大的性能改进。

我一直在将数据复制到临时表,然后将临时表与生产表合并,以解决UNIQUE约束冲突。

现在我今天的问题是,我是否应该在存储过程中使用临时表作为变量并在那里进行所有的合并和冲突解决?在当前的解决方案中,我们进行大容量复制,然后调用一个存储过程来合并和清空表。

使用临时表会有什么样的性能影响?

使用临时表是否被认为是一种不好的做法?如果是这样,为什么?

MSSQL 2012 中是否有替代方案可以很好地解决这个问题?

4

2 回答 2

1

我应该在存储过程中使用临时表作为变量并在那里进行所有的合并和冲突解决吗?

我认为最好使用临时表来避免存储过程的并发执行问题,因为过程的不同实例可以尝试读取和修改相同的行。

使用临时表会有什么样的性能影响?

临时表(以及表变量)存储在其中,tempdb因此您可以在那里遇到瓶颈。

使用临时表是否被认为是一种不好的做法?

不,但是使用它们不需要你做额外的写入和读取操作,因为首先你通过一些查询读取数据,将它写入临时表,然后再读取一次数据。

于 2012-11-09T08:35:17.080 回答
0

临时表较慢,这就是为什么如果可以避免的话我不会使用它们的原因。您可能使用 tempTables 的唯一原因是多个用户正在使用该过程。在这种情况下,它可能会更好。

于 2012-11-09T08:37:33.837 回答