使用INSERT和UPDATE更新表(性能与清晰度)

时间:2015-06-02 13:05:07

标签: sql-server insert sql-update

我逐步更新我的大表。我的大表是许多表连接的结果。在我的查询中有很多这样的表连接,它变得像迷宫一样,我偶然发现一个问题,同时添加另一个连接以获得另一列到表。

您是否建议通过添加另一个连接来使查询更加复杂 - 所有这些都是为了使一次插入到表中。或者,您是否建议将查询拆分为两个查询 - 一个insert,然后update。在第二个查询中,只需根据查询更新列。

我可以想象所有列的一个插入可能比其他列更新的小插入更快的列更快。但是,连接中的表的数量至少在清晰度方面有其限制。这里有什么最好的做法。

1 个答案:

答案 0 :(得分:1)

你听说过MERGE声明吗?处理同一查询中的插入/更新/删除。 Aaron Bertrand有一篇文章讨论了它的缺陷,但总的来说,它有助于简化何时必须执行这些操作:http://www.mssqltips.com/sqlservertip/3074/use-caution-with-sql-servers-merge-statement/

至于你的问题,明智的维护和索引调整,将这两个操作分解出来会更有利。向表中添加另一个连接不会使查询变得复杂。这就是RDBMS应该如何运作的方式。评论良好的代码和简洁的命名标准应该使阅读查询的人明白任何联接。

如果添加另一个连接会使更新/插入过程复杂化,那么是,将它们分解。如果只是解密查询正在做什么但操作没问题,请给它一些带注释的上下文。

在这样的事情上寻求最佳实践可能会让人们说'这取决于'。这是一个广泛的主题,可以通过多种方式处理,具体取决于您的情况。行数不足的人不会期望它变大,这可能会导致操作费用稍高。有大量行数(读数百亿)的人如果一直把服务器瘫痪,很可能会找新工作。