inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[백문이불여일타] 데이터 분석을 위한 고급 SQL 문제풀이

FROM절 Sub Query 실행시 Sub Query 밖에 WHERE 절 써도 효과적으로 SELECT 되는지 알고 싶습니다.

184

리나

작성한 질문수 77

2

일단 제목만 보고 이해가 안가실텐데요...

해당 강의에서 ROW_NUMBER() 를 쓰는거 보고 갑자기 의문이 생겨서 이렇게 질문을 드립니다.

만약 실제 회사에서 해당 경우에 ROW_NUMBER() 를 써도 되는것인지 의문이기도 해서요.

예를들자면

'API_HISTORY' 이라는 테이블이 있습니다. (참고로 약 400백만건 이상 데이터가 있습니다.)

URL DATE METHOD
/api/members 2021-02-12 13:43:35 POST
/api/categories/2 2021-02-13 23:34:55 GET
/api/members 2021-02-14 02:23:43 POST

SELECT *
FROM (
        SELECT
            URL,
            DATE,
            ROW_NUMBER() OVER (PARTITION BY sub.URL ORDER BY sub.DATE DESC) AS 'rank'
        FROM
            API_HISTORY AS sub
) AS T
 WHERE T.`rank` = 2

이렇게 FROM 절에 sub query로 'API_HISTORY' 테이블 SELECT 먼저 하는데요. 해당 서브 쿼리를 잘 보시면 

이번 강의때 배운 ROW_NUMBER() 를 사용해 보았습니다.

그런다음 rank를 맺긴것을 이용해서 WHERE절을 이용하기 위해 FROM절로 다시 감싸서 각 URL마다 rank(DATE DESE 기준) 2위 만 SELECT 할려고 합니다.

그런데 문제는 'API_HISTORY' 테이블은 400백만건이 있기 때문에

형식상 저 query를 실행하게 되면 sub Query가 먼저 실행되고(결국 이때 400백만건을 모두 조회한 셈???인가요??) 다 조회한뒤 WHERE 절 rank 2위만 SELECT 하는것 같습니다.

다시 말씀드리자면 일반적인 SELECT문 경우 WHERE절이 있다면 그걸 필터링 해서 가져오기 떄문에 성능상 빠르지만

해당 쿼리문은 FROM 절 SUB 쿼리를 실행하기 떄문에

먼저 서브쿼리 안에 있는것들을 SELECT 하고(약 400백만건 모두 조회 한다는 의미입니다.) 그다음에 WHERE절 통해 필터링 해서 더 늦게  출력되지 않을까 생각되는데요.

제가 잘못 이해하는것인가요?

답변 부탁드립니다^^

좋은 하루 되세요 :)

sql

답변 1

1

윤선미

안녕하세요. 답변이 늦어져 죄송합니다.

아래와 같이 계산을 하고 계시네요.

1. 전체 테이블에 대해 윈도우 함수로 rank 계산

2. 계산된 rank 를 이용해 WHERE 절에서 데이터 필터링

1 단계에서 전체 테이블을 가지고 rank 계산을 꼭 해야한다면 전체 테이블 연산을 피할 수 없습니다.

데이터가 너무 많아서 현실적으로 계산이 불가능하다면 일정 기간 동안 조회된 url 에 대해서만 연산을 하는 등 계산하는 데이터의 범위를 좁히는 것이 필요합니다.

답변이 되었기를 바랍니다 :)

감사합니다.

강의기간 연장문의

0

95

2

HackerRank : Weather Observation Station 11 문제풀이

0

115

1

SET4의 3번 자리바꾸기 문제 다른 풀이

0

185

1

set 3의 3번 문제- 데이터의 개수가 짝수일 때 질문

0

262

2

set 1 - 2번 문제풀이

0

257

1

세트2번 Binary Tree Nodes 질문입니다!

0

223

2

고급문제풀이set1 3번 문제

0

248

2

고급문제풀이 3번 INNERJOIN 활용시 오류

0

268

1

회사일하다 보니까 다 못듣고 수강기간이 다끝나가는데 .,. 수강기간 연장은 어떻게 할수 있나요?ㅜㅜ

0

319

1

[Weather 20 ] 2번째 쿼리도 따라 했는데 왜 다 실패일까요?

0

371

1

[Weather 20] 따라 했는데 왜 작동 안해요?

0

273

1

weather-20 왜 작동 안하는건가요?

0

225

1

Ollivander's Inventory 윈도우 함수 min() over

0

309

1

LeetCode 626. Exchange Seats 리트코드 제출 오류

0

505

2

섹션4에 3번 문제풀이 질문

0

375

2

SQL Project Planning 풀이 관련 문의

0

578

2

섹션 1번 4번문제 풀이

1

282

1

섹션1 2번 문제풀이 강의

0

300

1

set2 - 1 같게 작성했는데 답이 이상합니다.

0

284

1

max함수를 써서 풀지는 못하나요?

0

296

1

윈도우 함수를 이용해서 풀고 싶어서 써봤습니다. 더 간단하게 줄일 수 있을까요?

0

256

1

(Hacker Rank)Binary Tree 문제 질문

0

325

1

쿼리 두개로 작성하고 싶지 않아 하나로 어떻게든 만들어 봤습니다.

0

290

1

이런 풀이는 왜 안되는지 궁금해요

0

271

1