아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
신랄한메추리9
신랄한메추리921.03.19

MYSQL에서 다른 타입끼리 조인거는법

한 컬럼은 INTEGER고, 한 컬럼은 VARCHAR입니다

두개 테이블을 조인 걸다보니 속도가 너무 오래 걸리는데 이 문제를 해결하고 싶습니다.

테이블 로우가 몇개 안되면 크게 문제가 없는데 방법이 없을까요?

55글자 더 채워주세요.
답변의 개수3개의 답변이 있어요!
  • 컬럼 타입이 다른 경우 형변환을 해서 조인을 거는 방법 밖에 없습니다.

    단 인덱스를 생성 하거나, 조회 결과가 특정 테이블에서 적게 나오는 경우 해당 테이블을 먼저 조회하고 조인을 하도록 조인 순서를 변경하는 방식으로 튜닝이 가능하긴 하죠.

    데이터가 많다면 일단 조인 타입이 다른걸 어떻게 해결할지 고민하시기 보다는 인덱스 및 파티션 생성으로 성능을 높여야 겠습니다.


  • 조인하려는 컬럼에 형 변환이 일어나게되면 인덱스가 작동하지 않습니다.

    기본적으로 조인하려는 두개의 컬럼은 같은 정보를 담고 있는 것으로 판단되는데

    그런 컬럼들은 표준화를 통해 같은 이름과 같은 데이터 형을 가지도록 설계되어야 합니다.

    꼭 지금의 데이터 형을 유지해야하는 것이 아니라면 두개의 테이블을 같은 데이터 형으로 변경하는 것을 추천드립니다.


  • 컬럼을 Integer 로 통일하든 varchar 로 통일하든 TO_CHAR 나 TO_NUMBER 함수를 사용하면 되겠죠.

    컬럼의 타입이 다른 것보다 테이블을 조인하는데 시간이 오래 걸릴 것으로 예상되네요.

    이러한 경우 PK,FK,인덱싱을 잘 설정하여 PLAN 을 통해 실행시간을 체크해봐야 합니다.

    하지만 두 테이블에서 각 항목이 타입이 다르니 FK 를 걸기 어렵겠네요.

    좋은 방법 중 하나가 VIEW 를 생성하는 것입니다.

    두 개 테이블을 원하는 형태로 조인하는 쿼리를 이용해서 VIEW 를 생성해 놓으면 조회할 때 빠른 속도로 실행이 가능할 것입니다.