개발자

SQL에서 subquery는 인덱싱이 안 먹히나요?

2023년 03월 02일조회 181

아래와 같은 SQL을 작성해서 쓰려고 했는데, 인덱싱이 제대로 안먹더라구요. 혹시 sub query 로 만들어진 SQL은 인덱스를 안타나요? 인덱스는 pm, bm 모두 memberId에 걸려있고 추가로 bm.upgradedAt에도 걸려있습니다. 사용하고 있는 DB는 mariaDB 입니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

인기 답변

손정현님의 프로필 사진

안녕하세요! 정확한건 EXPLAIN 결과를 보면 알 수 있겠지만, SQL을 읽고 실행 순서를 정하는 DB 엔진 알고리즘에서 sub query는 index를 타지 않는게 더 효율적이라고 판단되면 안 탈 수도 있습니다. 다만, EXPLAIN을 돌려보았을때 만약 derived 같은 키워드가 보인다면 derived table optimization이 잘 돌아갈 수 있는 쿼리인지 확인하시면 좋을 것 같아요. derived table은 보통 임시 결과 값을 저장하는 용도인데, subquery가 어떻게 구성되어 있느냐에 따라서 최적화가 될수도, 안될수도 있습니다. 예를 들면, mariaDB에서는 derived table을 가능하면 상위 오퍼레이션과 머지해서 좀 더 효율적으로 작업을 하려고 하는데 subquery 안에 특정 오퍼레이션이 들어가게되면 절대 상위 오퍼레이션과 머지를 할 수 없는 쿼리가 되어버립니다. ex) subquery안에 GROUP BY, DISTINCT 등이 있으면 머지가 안됨. 참고하시면 좋을 것 같아요 :) - https://mariadb.com/kb/en/derived-table-merge-optimization/ - https://mariadb.com/kb/en/condition-pushdown-into-derived-table-optimization/ (여기 첫 문단에 subquery에 포함되지 말아야할 것들이 있습니다)

profile picture

익명

작성자

2023년 03월 06일

감사합니다!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!