我想根据匹配两列的值从两个表中选择一些记录。 我有两个相同的查询,其中包含两个列的连接:
SELECT
*
FROM
USER_MASTER UM
INNER JOIN
USER_LOCATION UL
ON
UM.CUSTOMER_ID=UL.CUSTOMER_ID AND UM.CREATED_BY=UL.USER_ID
并且可以通过以下具有单列连接的查询来实现相同的结果:
SELECT
*
FROM
USER_MASTER UM
INNER JOIN
USER_LOCATION UL
ON
UM.CREATED_BY=UL.USER_ID
WHERE
UM.CUSTOMER_ID=UL.CUSTOMER_ID
上述查询的效果是否存在差异?
答案 0 :(得分:0)
关于表现的一切答案是:它取决于。
一般来说,引擎足够智能以优化两个查询,如果两者都产生相同的执行计划,我并不感到惊讶。
实际上,您必须运行两次查询并研究执行计划,以确定两者是否使用相同数量的CPU,IO和内存运行大约相同的时间 AND 。 (记住,性能不仅仅是关于快速运行,而是关于所有资源的智能使用)。
对于"语义"愿景,你的数据使用两个键来确定"。在这种情况下,您可以将两个表达式都放在JOIN谓词上。只允许在WHERE子句中进行过滤。 显式连接优于隐式连接的优点是创建此逻辑(和可视)分离