스칼라서브쿼리 인덱스 조건 걸수 없는 컬럼이라서 튜닝할수 있는방법이 있을까요? 0

by 나태하지 말공 [2022.11.11 19:30:09]


상황은 메인A 테이블에서 등록을 할경우 메인A 테이블 이력날짜,이력코드,이력번호 업데이트 치는 형태인데 

조회시 이력이 있는지 없는지 확인 하는 상황이라서요  

이력이 없을시 해당 칼럼 전부 NULL 상태이고 해당칼럼들은 인덱스가 걸려 있지 않습니다,

튜닝할수 있는 방법이 있을까요? 현재 DB는 오라클인 상황입니다.

SELECT  조회칼럼
       ,   (SELECT DECODE(COUNT(1),0,'N','Y')   < -- 풀스캔
               FROM 메인A
               WHERE 이력날짜=  "A.날짜" <-   같은 레코드 날짜 = 이력날짜 다른컬럼 
                AND 이력코드 = "A.코드" <-  같은 레코드 이력코드  코드= 이력코드 다른컬럼 
                AND 이력번호  = "A.번호"   < - 같은 레코드 번호   번호 = 이력번호 다른컬럼 
    ) YN    
       FROM 메인A  A
          , 다른테이블 B  
          , 다른테이블 G
WHERE 조건들 

건수가 쌓일수록 느려지고 있는상황입니다.

by 마농 [2022.11.14 09:05:24]

1. 인덱스 필요해 보입니다.
2. 스칼라서브쿼리는 아우터 조인 형태로 바꿀 수 있습니다.


by 나태하지 말공 [2022.11.14 19:45:57]

인덱스 없이 아우터조인 형태로 해결이 가능하다는 말씀이신가요? 

인덱스는 무조건 필요하다는 말씀일까요?

 


by 마농 [2022.11.15 08:09:44]

우선순위에 따라 번호를 메겼습니다.
인덱스가 1순위로 필요해 보입니다.
아우터 조인 형태로 바꾸는 것은 인덱스가 없어도 되지만, 인덱스가 있는 것이 좋습니다.
"무조건" 이란 표현은 조심스럽습니다.
상황에 맞게 판단하셔야 할 문제입니다. 무조건은 없습니다.
그리고 아우터 조인으로의 변경도 고려할 것이 많습니다.
테이블간의 관계가 어떻게 되는지?에 따라 구현 방법이 달라질 수 있습니다.


by 우리집아찌 [2022.11.14 13:30:31]

실시간 조회가 필요없다면(예를 들명 일 배치) BATCH로 해당 스칼라서브쿼리를 테이블화(INDEX도 추가(해서 JOIN 도 가능합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입