哪个更好
Update TableA
SET TableA.ColumnB = TableB.ColumnB
FROM Table B
WHERE TableB.ColumnA = 1
AND TableA.ColumnC = TableB.ColumnC
或
Update TableA
SET TableA.ColumnB = TableB.ColumnB
From TableA
INNER JOIN Table B ON TableA.ColumnC = TableB.ColumnC
WHERE TableB.ColumnA = 1
我认为第一种方法更容易阅读,但我不知道哪个版本实际上更好,如果两个版本在大型表上运行时在速度上有任何差异。
谢谢你的帮助。
我倾向于使用ansi风格的连接(INNER JOIN等)而不是"旧式"连接。我发现更容易确定连接条件是什么,因为ON子句紧跟着连接表的名称,同样,更容易看到什么被用作过滤器,因为WHERE子句没有与所有连接条件混淆在一起。
根据我的经验,没有性能差异(Oracle)。
分享快乐。
看情况。
在其他条件相同的情况下,SQL在计算where子句中的连接之前计算from子句中的连接。问题是我们不知道TableB。列na被索引了,它的基数是多少。我们不知道TableA。列或表b。列被索引。我们不知道每条记录的数量,也不知道是否有统计信息可以帮助优化器。
问自己需要扫描多少行来计算TableB。ColumnA = 1。然后问自己需要扫描多少行来评估TableA。列= tableb .列。您将希望基于扫描的最少行返回最少行的连接优先。
如果表b。columnna的索引与TableA一样。列=表b。那么这两个查询应该工作得同样好,因为优化器将为您回答问题。
话虽如此,简单的解决方案是查看两者的执行计划。