性能比较:使用 WHERE 子句的交叉联接与内联接
使用交叉联接后跟 WHERE 子句的功效通常是争论反对内部联接的性能。虽然这两种方法产生相似的结果,但在某些情况下,一种方法可能比另一种方法表现更好。
使用 WHERE 子句的交叉联接
交叉联接组合来自两个或多个表,无论它们之间有任何关系。与 WHERE 子句结合使用时,交叉联接可以根据指定谓词有效过滤出所需的行。
内联接
内联接匹配两个表中的行基于 ON 或 USING 子句定义的相等比较。结果行仅包含匹配行的列。
性能注意事项
通常,内连接比使用 WHERE 子句的交叉连接更高效。
在交叉连接中,DBMS 必须首先生成两个表的整个笛卡尔积,这在计算上可能会很昂贵,尤其是对于大型数据库表。然后应用 WHERE 子句消除不需要的行,需要额外的处理。
另一方面,内联接仅组合满足联接条件的行,从而无需初始笛卡尔积。这会缩短执行时间。
示例
考虑提供的示例查询:
SELECT User.* FROM User, Address WHERE User.addressId = Address.id; SELECT User.* FROM User INNER JOIN Address ON (User.addressId = Address.id);
使用内部联接的第二个查询通常会比使用交叉联接和 WHERE 子句的第一个查询执行得更快。 DBMS 可以根据相等比较直接从 User 表中选择所需的行,而无需先生成大的笛卡尔积。
结论
而与 WHERE 交叉连接子句可以实现与内连接相似的结果,内连接通常提供更好的性能。但是,需要注意的是,特定的供应商性能指南可能会影响不同情况下的最佳加入选择。
以上是WHERE 交叉连接与内连接:哪种 SQL 连接提供更好的性能?的详细内容。更多信息请关注PHP中文网其他相关文章!