如何使用OR条件提高SQL JOIN的性能

时间:2018-12-26 21:25:37

标签: mysql sql database join hana

复杂的JOIN查询为:

SELECT 
  FIRST.NAME,
  SECOND.FIRST_NAME,
  SECOND.LAST_NAME
FROM FIRST_TABLE FIRST
LEFT JOIN SECOND_TABLE SECOND 
  ON (SECOND.FIRST_NAME = FIRST.NAME OR SECOND.LAST_NAME = FIRST.NAME)

将导致性能下降。

如何获得更好的性能?

2 个答案:

答案 0 :(得分:0)

这回答了问题的原始版本。

使用SELECT FIRST.ID, FIRST.NAME FROM FIRST_TABLE FIRST WHERE EXISTS (SELECT 1 FROM SECOND_TABLE SECOND WHERE SECOND.FIRST_NAME = FIRST.NAME) OR EXISTS (SELECT 1 FROM SECOND_TABLE SECOND WHERE SECOND.LAST_NAME = FIRST.NAME); 可能会更好:

SECOND_TABLE(LAST_NAME)

然后,为了提高性能,您希望在SECOND_TABLE(FIRST_NAME)和{{1}}上建立索引。

答案 1 :(得分:0)

您可以尝试一下,看看会得到什么。它在很大程度上取决于FIRST_NAMELAST_NAME上的索引,但是避免了OR

SELECT 
  FIRST.NAME,
  SECOND.FIRST_NAME,
  SECOND.LAST_NAME
FROM FIRST_TABLE FIRST
  LEFT JOIN (
     SELECT S1.FIRST_NAME as TEST_NAME,
            S1.FIRST_NAME,
            S1.LAST_NAME       
     FROM   SECOND_TABLE S1
     WHERE  S1.FIRST_NAME <> S1.LAST_NAME
     UNION ALL
     SELECT S2.LAST_NAME as TEST_NAME,
            S2.FIRST_NAME,
            S2.LAST_NAME       
     FROM   SECOND_TABLE S2
   ) AS SECOND
  ON FIRST.NAME = SECOND.TEST_NAME