• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

다대다 쿼리시 질문

22.03.23 14:30 작성 조회수 91

0

자신이 속해있는 방들과 그 방에 속한 맴버들을 한꺼번에 구해오려는 쿼리를 짜려고합니다.

그래서 생각해본결과 

 
const myRooms = await this.roomMembersRepository
.createQueryBuilder('roomMembers')
.innerJoinAndSelect('roomMembers.Room', 'rooms')
.innerJoinAndSelect('rooms.RoomMembers', 'members')
.innerJoinAndSelect('members.Profile', 'profiles')
.where('roomMembers.UserId = :UserId', { UserId })
.getMany();

이런식으로 innerjoin 3번날리는것 (필요한게 정보가 다오긴하는데 더럽게와서 포멧필요.)

아니면 roomMembers를 그냥 따로 Typeorm Entity를 만들지않고 그냥 ManyToMany로 연결해서

const myRooms = await this.profilesRepository
.createQueryBuilder('profile')
.innerJoinAndSelect('profile.Rooms', 'rooms')
.innerJoinAndSelect('rooms.Members', 'members')
.where('profile.UserId = :UserId', {UserId})
.getOne();

이런식으로하면 inner join 4번날리는것 (정보 깔끔)

그러나 걱정되는게 저런식으로 join 4번해버리면 DB에 부하가 많이 걸리나요?? 사실 3번하는것도 걱정되는데,,,.

실전 경험이 없어서 저런식으로 짜도 될지 모르겠습니다.

너무 개인적인 질문 죄송합니다. 보통 이런경우엔 어떻게 쿼리를 짜는지 알려주시면 정말 감사하겠습니다.

 

답변 1

답변을 작성해보세요.

1

네 좀 부하가 많이 걸릴 수 있습니다. 애초에 저 정보가 한번에 다 필요한가요? 필요한 정보만 나눠서 불러오시는 게 좋습니다.