我有一个表需要填充很多行,每小时数百万。
现在我使用实体框架在C#中开发了一个应用程序,它不支持批量复制。我之前已经开发出一种使用批量复制的解决方案,这是一项巨大的性能提升。
我一直在将数据复制到临时表,然后将登台表与生产表合并,以解决UNIQUE
约束冲突。
现在我的问题是,我是否应该将临时表用作存储过程中的变量并在那里进行所有合并和冲突解决?在当前的解决方案中,我们进行批量复制,然后调用一个存储过程来合并和清空表。
使用临时表会产生什么样的性能影响?
使用临时表是否是一种不好的做法?如果是这样,为什么?
MSSQL 2012中是否有其他可以用来解决此问题的方法?
答案 0 :(得分:1)
我应该使用临时表作为存储内的变量 程序并在那里进行所有合并和冲突解决?
我认为最好使用临时表来避免并发执行存储过程的问题,因为不同的过程实例可以尝试读取和修改相同的行。
使用临时性会产生什么样的性能影响 表
临时表(以及表变量)存储在tempdb
中,因此您可以在那里遇到瓶颈。
使用临时表是否是一种不好的做法?
没有。但是在没有必要的情况下使用它们会进行额外的写入和读取操作,因为首先通过某些查询读取数据,将其写入临时表,然后再读取数据。
答案 1 :(得分:0)
临时表速度较慢,这就是为什么我不会使用它们,如果可以避免的话。您可能使用tempTables的唯一原因是多个用户正在使用该过程。在那种情况下可能会更好。