만약 데이터가 100만개라고 가정하면 ORDER BY 쿼리를 날려 순위를 정하는 것은 괜찮을까?


현재 우리 프로젝트에서 데이터 거래에 따른 가격 상승, 하락, 가격 상승률, 하락률 Top5를 나타내는 지표가 필요하다. 데이터를 가져오는데 있어 고민이 되는 부분은 만약 우리가 휴양지가 10만개 이상 존재하고 있고 거래 데이터가 1억개 넘게 존재한다면 Top 5를 가져오는 것은 과연 가능한 것일까 라는 생각이다. 왜냐하면 SQL 로 ORDEY BY 쿼리를 날려 가져오게 된다면 초기에 데이터가 적을 때는 괜찮겠지만 나중에 서비스가 커진다고 가정하면 데이터를 가져오는 해당 쿼리는 속도가 매우 느릴 것이다. 따라서 쿼리로 데이터를 가져오는 것 이외에 Top5를 가져오는 프로세스가 필요하다.
데이터를 가져오고 정렬을 하는데 있어 가격 상승, 상승률을 계산할 때 보통 아래와 같은 기준으로 가져오게 된다.
*상승률 = (현재가-기준가)100/기준가
현재 데이터베이스 상태에서 현재가를 들고있는 요소는 Transaction Table이고 기준가를 들고 있는 요소는 PriceInfo Table 이다. 서로 다른 테이블에 존재하므로 하나의 쿼리로 조회를 날리게 되면 Multiple Join이 발생하여 성능의 저하가 발생하게 된다. 따라서 쿼리 이전에 데이터를 가공한 상태로 놔두는 것이 중요하다.
현재 MySQL DB가 구축되어 있기 때문에 DB를 확장하여 점수 관련 Table을 만들거나 Column을 추가할 수도 있다.