안녕하세요.
현재 mysql을 사용하고 있는데 궁금한점이있습니다.

조인을 사용하면 의존성도 생기고 성능이 많이 떨어진다고 해서 조인을 사용하지 않고 2번 조회하는 식으로 하고 있는데 차이가 많이 날까요??

조인을 하게되면 수정도 복잡해지고 쿼리도 기어져서 그냥 조인을 쓰지 않고 조회를 2번하는것이 더 좋지 않을까 생각을 하는데 어떤게 정답인지 모르겠어 질문글을 올립니다. 

  • profile

    케바케입니다. 조인할 때는 무엇을 어떻게 조인하고, 2번 조회할 때는 어떤 기준으로 조회하는지, 둘 중 어느 쪽이 인덱스나 캐시의 덕을 더 많이 볼 수 있는지에 따라 결과가 뒤바뀔 수 있지요.

     

    MySQL도 20년 전처럼 조인만 하면 겔겔거리던 수준은 이미 오래 전에 넘어섰지요. DB 설계와 쿼리 튜닝만 잘 하면 억 단위의 레코드가 있는 테이블 여러 개를 조인해도 전혀 느려지지 않습니다.

  • profile ?

    아하!!!! 감사합니다!!!
    지금 게시글 조회하면서 게시글 내부 댓글은 다른테이블에서 게시글 아이디로 가지고 오는데 사실상 거의 차이가없고 비슷한 수준인건가요???
    그리구 또 하나 궁금한게 컬럼개수는 몇개정도가 적당할까요??
    작은 스타트업에서 일하고 있는데 사수가없어서 궁금한것들이 쌓여버렸네여 ㅜㅜ

     

  • ? profile

    글과 댓글을 조인해서 가져온다면 글 테이블의 모든 컬럼을 댓글 갯수만큼 반복하여 가져오겠지요? 아주 긴 내용이 들어 있을 수도 있는데 말이지요. 이럴 때는 두 번의 쿼리로 각각 가져오는 것이 더 효율적일 것 같네요.

    반면에, 예를 들어 댓글 목록을 불러올 때 회원 테이블과 조인해서 각 댓글의 글쓴이 정보와 관련된 몇몇 컬럼만 가져오는 것은 딱히 문제가 되지 않겠지요. 어차피 필요한 정보인데다가, 회원정보를 개별적으로 가져오려면 무척 비효율적이니까요. 이렇게 상황에 따라 다르기 때문에 케바케라고 말씀드린 거예요.^^

    컬럼 갯수에 대해서도 정해진 규칙은 없지만, 컬럼을 추가하는 이유가 무엇인지 생각해 볼 필요가 있어요. 1:N 관계를 표현할 때는 컬럼 하나 추가하는 것이 대체로 편리합니다. 반면, N:N 관계를 표현하기 위해 여러 개의 컬럼을 추가하고 있다면 잘못하고 있을 가능성이 높습니다. N:N 관계는 테이블 분리해서 입력하고, 검색할 때 조인하는 것이 정석이죠.

  • profile ?
    이해가 정말 쏙쏙,,, 감사합니다!!!