[英]How to improve performance of a SQL JOIN with an OR condition
復雜的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)
將導致性能下降。
如何獲得更好的性能?
這回答了問題的原始版本。
exists
可能會更好:
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)
上SECOND_TABLE(LAST_NAME)
索引。
您可以嘗試一下,看看會得到什么。 它在很大程度上取決於FIRST_NAME
和LAST_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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.