我有2个表A,B,其中ID字段是公共密钥。 如果我使用下面提到的任何一个查询,结果将是相同的。
select * from A,B where A.ID=B.ID and A.Id = 10;
select * from A inner join B on A.ID=B.ID where A.Id = 10;
任何人都可以告诉我哪个查询在性能方面会更好,为什么会这样?
答案 0 :(得分:2)
它们应该大致相同。但是,第一个查询是SQL反模式,不应该使用它。隐式连接通常会导致问题,因为随着它们变得越来越复杂,您会发现where子句经常被意外地省略,而这在大多数数据库中都不会使用显式连接语法进行语法检查。如果遗漏了某个意外的子句会导致交叉连接,那么结果就不正确了。
此外,如果您需要将一个连接更改为左连接并使用显式连接(尤其是在不再允许隐式左连接语法且始终存在错误的SQL服务器中),则可能会在以后的维护中出现不一致的结果永远不应该使用)并最终混合连接(当您有多个连接时,这是大多数查询常见的)。
此外,如果你真的想要一个交叉连接,那么稍后进行维护的人不太可能知道它,并认为你的代码是错误的,需要内部连接。使用显式连接时,意图是明确的。