mysql 질문 0 1 508

by 미무미 [MySQL] [2022.01.17 10:35:30]


제목 없음.png (11,311Bytes)

select sql_no_cache C.f9 as 은행코드, max(C.f10) as 은행명 
from 
	00booking B 
    left join 00booking A
    on A.customercode = B.customercode and 
    A.yr = B.yr and A.f1 = B.f1 and A.f2 = B.f2 and A.f3 = B.f3 and A.f8 = B.f8 and A.code <> B.code 
    left join 00booking C 
    on B.customercode = C.customercode and 
    B.f1 = C.f1 and B.f2 = C.f2 and C.f3 = '대변' and C.f4 = '025300' 
where 
	A.customercode = '152' and A.yr = '2021' and '2021-07-01' <= A.f1 and A.f1 <= '2021-07-31' and A.f3 = '차변' and A.f4 <> '013500' and (((A.vat_code = '57' or A.vat_code = '59' or A.vat_code = '61') and B.f4 = '013500') or A.vat_code = '58' or A.vat_code = '62') and C.f10 <> '' and C.f21 = '신용카드' 
group by C.f9 
order by 은행명 asc

 

이 쿼리가 36초가 걸리는데요

00booking테이블로 A, B, C 3개나 선언해서 쓰는부분이 걸리는데

이렇게 쓰기도 하는건가요?

 

혹시 몰라서 SQL 실행계획도 첨부했습니다.

by 마농 [2022.01.17 13:17:08]

1. Selt Join 입니다.
- 필요에 의해 셀프 조인이 사용될 수 있습니다.
- 다만, 정말 필요한지? 의심해 볼 필요는 있습니다.
2. c 와 b 의 조인 관계에서
- yr 조건이 빠진 듯 하네요.
- 기타 누락된 조건은 없는지 검토가 필요합니다.
3. 아우터 조인이 되고 있지만, 실제로는 이너조인으로 동작되게 되겠네요.
- 습관적으로 사용되는 불필요한 아우터 조인은
- 실제로 필요한 경우에만 사용해야 합니다.
4. Possible Index 가
- 컬럼 1개의 개별 인덱스만 보이는 듯 하네요.
- 적절한 형태의 결합인덱스가 있어야 할 것 같네요.
- (customercode, yr, f1, f2, f3)

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