Sql语法性能



哪个更好

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。那么这两个查询应该工作得同样好,因为优化器将为您回答问题。

话虽如此,简单的解决方案是查看两者的执行计划。

最新更新