A라는 테이블을 LEFT OUTER JOIN을 합니다.
SELECT *
FROM A AS A -- 자식.
LEFT OUTER JOIN A AS B -- 부모.
ON 조인키
WHERE A.[Name] LIKE '%키워드%'
OR B.[Name] LIKE '%키워드%'
실행계획을 보니, 테이블을 두번 스캔을 하는거 같습니다.
이럴때 한번만 스캔해서 데이터를 가져오는 방법이 없을까 문의 드립니다.
OR B.[Name] LIKE '%키워드%' => 이 조건이 없으면 1초에 나오는데,
해당 조건이 들어가면 2초이상 걸리더라구요.
2번 읽어서 느린게 아니라
아우터 조인인데다가, OR 조건인데다가, % 조건이라서 느릴 듯 합니다.
안좋은 조건들은 두루두루 다 갖췄네요.
차라리 UNION 으로 풀어 보는 것은 어떨지요.
SELECT a.*
FROM a
WHERE a.name LIKE '%키워드%'
UNION
SELECT a.*
FROM a
INNER JOIN a b
ON 조인키
WHERE b.name LIKE '%키워드%'
;
테스트 해봤는데, 속도적인 측면에서는 비슷하거나 알려주신 방법이 조금 빠른 것 같습니다.
다양한 시각으로 보는 방법을 배웠습니다. 고맙습니다.
-- UNION 제거 --> UNION ALL
SELECT a.*
FROM a
WHERE a.name LIKE '%키워드%'
UNION ALL
SELECT a.*
FROM a
INNER JOIN a b
ON 조인키
WHERE b.name LIKE '%키워드%'
AND a.name NOT LIKE '%키워드%'
;