빵돌이2
47
2021-02-10 06:50:22 작성 2021-02-10 06:56:28 수정됨
3
263

서브 쿼리와 조인이 반복적으로 들어가는 쿼리 개선 방법이 궁금합니다.


먼저 저는 입사 4개월 차 신입입니다. 질문 수준이 조금 낮더라도 도와 주시면 감사하겠습니다.

성능 개선을 위해 3일간 많은 노력을 했지만 성과가 잘 나오지 않아 도움 요청 드리게 됐네요

아래 코드 첨부할게요. 실제로는 100행 정도 되는 코드라 나름대로 함축 시켜봤습니다.


비교적 많은 트래픽을 차지 하는 쿼리인데 들여다 보니 SELECT를 하기 위해 SELECT를 하고 그 안에서 조인하고 또 조인하는 반복적인 형태가 비효율적인 것 같아 바꾸고 싶어요


현재 쿼리로는 플랜을 봐도 조회하는 ROW 수도 많지 않고 인덱스도 잘 타지는 것으로 보여집니다
다만 두번째 SELECT에 A테이블 관련 key_len 의 길이가 긴 것은 어떤 영향을 끼치는지 아직 파악하지 못했습니다.


질문 정리

1. key_len 키의 길이가 길다는 것은 성능 상에 문제가 있을까요?

2. 서브 쿼리 안에 조인을 반복 사용해야 하는 경우 선배님들은 보통 어떤 방식으로 풀어 가시나요?


조건은 테이블을 따로 만들지 않는 것이고 소스코드를 변경 하면 다른 로직에도 영향이 생겨 오로지 쿼리로만 성능 개선을 해야 하는데 어떻게 이쁘고 빠르게 만들어야 할 지 감이 안오네요.. 어떤 방식이 좋을 지 추천 부탁 드립니다.

1
  • 답변 3

  • LongTogether
    3
    2021-02-10 08:51:41

    YY 서버 쿼리를 먼저 실행해서 건수를 줄인다음 A 테이블 조인하면 어떨까요? 참고하세요~


  • 콘푸로스트
    2k
    2021-02-10 09:52:44

    예시로 된 쿼리는 잘못된 구조를 가지고 있기 때문에 의도를 알 수가 없습니다.


    1. 키값이 길다고 해서 느리지 않습니다.

    - 다만, 조인되는 컬럼에 인덱스가 없으면 성능이 좋지 않습니다.


    2. 서브쿼리 안에 조인은 반복되서 실행되지 않습니다.

    - 스칼라 서브쿼리인 경우가 아니면, 매 로우마다 조인이 계속해서 실행되지 않습니다.

    - 스칼라 서브쿼리 조인 예시

    SELECT

       A.ID

      , (SELECT NAME FROM DEPT FROM ID = A.ID) /* 컬럼절에 들어가는, 단일행 출력하는 서브쿼리 */

    FROM USER_INFO

  • neatCat911
    92
    2021-02-10 09:58:57

    https://database.sarang.net/

    DB 고인물이 많은 곳 입니다.

    --
    https://database.sarang.net/index.php?inc=read&aid=41829&criteria=oracle&subcrit=&id=0&limit=20&keyword=%EB%A7%88%EB%86%8D&page=1

    와 같이 

    with 절로 조회가 가능한 테스트 데이터가 있는
    SQL 만들어서 쿼리 문의해보세요~


    p.s
    1_ 실제 쿼리를 보여주더라도 데이터가 없으면
        정합성 (작성한 SQL 이 내 의도대로 되는지) 확인이 어렵습니다.

    2_ 쿼리 중 일부를 한글로 설명한다는건,
        모르는 단어로 되어있는 영문 소설을 한글로 번역하는것처럼
        아무도 알아듣지 못합니다. 

         ( 그래서, 쿼리툴 Query Tool 로 실행해 볼 수 없는
            SQL 문의는 대부분 원하는 답변을 얻기 어렵습니다. )

  • 로그인을 하시면 답변을 등록할 수 있습니다.