sql server语言 - 使用INSERT和UPDATE(性能和清晰度)来更新表



我以增量方式更新我的大表。我的大表是许多表连接的结果。在我的查询中有如此多的表连接,以至于它变得像迷宫一样,我偶然发现了一个问题,同时添加另一个连接以获得另一列到表中。

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

我可以想象,一次插入所有列可能比少数列的小插入伴随着更新其余列快。但是连接中的表数量有其限制,至少在清晰度方面是如此。这里的最佳实践是什么?

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

至于您的问题,维护方面和索引调优方面,将这两个操作分开会更有利。向表中添加另一个连接不会使查询变得复杂。这就是RDBMS应该如何工作的。注释良好的代码和简洁的命名标准应该使任何连接对阅读查询的人都很清楚。

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

询问这类事情的最佳实践往往会让人们说"视情况而定"。这是一个很宽泛的话题,根据你的情况,可以用多种方式来处理。行数很少的人不希望它变得很大,可以通过一些昂贵的操作来解决问题。拥有大量行数(数百万-数十亿)的人很可能会寻找一份新工作,如果他们一直使服务器瘫痪的话。

最新更新