我在大约7000行T-SQL存储过程中有自己的业务逻辑,其中大多数具有下一个JOIN语法:
SELECT A.A, B.B, C.C FROM aaa AS A, bbb AS B, ccc AS C WHERE A.B = B.ID AND B.C = C.ID AND C.ID = @param
如果我将这样的查询替换为以下内容,是否可以提高性能:
SELECT A.A, B.B, C.C FROM aaa AS A JOIN bbb AS B ON A.B = B.ID JOIN ccc AS C ON B.C = C.ID AND C.ID = @param
还是一样?
这两个查询是相同的,除了第二个查询是ANSI-92 SQL语法,而第一个查询是未合并join子句的较旧的SQL语法。尽管您可能想检查一下,但它们应该产生完全相同的内部查询计划。
出于多种原因,您应该使用ANSI-92语法
我本人抵制ANSI-92一段时间,因为旧语法在概念上略有优势,因为将SQL想象成所有使用的表的大量笛卡尔联接,然后进行过滤操作会更容易- 这是一种有用的思维方法掌握SQL查询的功能。但是,几年前,我决定需要与时俱进,经过一段较短的调整后,我现在非常喜欢它- 主要是因为上面提到的第一个原因。唯一应该脱离ANSI-92语法或者不使用该选项的地方是自然连接,这是隐式的危险。