아무리 구글링을 하고 오픈채팅에 들어가서 물어봐도 쿼리 성능 분석이 쿼리 실행 예상 속도를 측정할 수가 없다.
물론 쿼리 실행 속도가 조금씩 다를 수 있고 구글링으로 얻은 성능 분석 읽는 법에선 실제 쿼리 실행 속도랑 전혀 다른 값이 나와 신뢰를 잃었다.
블로그 글을 다 뒤지고 아무리 계산을 때려보아도 정확히 4분 45초가 아니더라도 4분 언저리정도 걸린다 이런 예측이 되야하는데
처음부터 차근차근 보자
cost=0.00..66097.02
어떤 블로그 글에는 여기 부분이 해당 row를 스캔하는데 걸리는 시간 단위라고 써놨다.
하지만 이걸 통해 조회하는데 걸리는 시간을 알 수 없었다.
66097이 밀리초라면 초로 변환하기 위해 1000을 나누면 66.097초 그렇다면 4분은 커녕 1분6초밖에 걸리지 않는다.
음 말이 안되니 통과
actual time = 0.011..160.545
이 부분은 EXPLAIN ANALYZE를 하면 나오는 분석 값이다. (ANALYZE는 쿼리를 직접 실행해서 분석을 해주기때문)
하지만 0.011..160.545를 어떻게 변환을 하고 계산을 해봐도 4분은 나오지 않는다.
160초라고 해도 2분 30초
Planning time 0.076 ms
Execution time 217.880 ms
이 값으로도 4분을 구할 수 없었다.
물론 데이터가 적은 테이블을 성능분석 했을때 현저히 낮은 시간 값들이 나왔지만
내가 제일 궁금한거는 이 쿼리를 실행하는데 예측 시간을 구하고 싶었다.
아무리 구글링을 하고 속도 측정, 성능 분석 글들을 봐도 4분 언저리를 구하는 방법이 없었다.
그럼 또 여기서 의문 성능 분석을 통해 쿼리 실행 속도가 느린지 빠른지 판단한다는데
실행 속도를 측정할 수 없으면서 빠른지 느린지 기준은 어떻게 되는지 (이거는 더 공부하면서 찾아봐야겠다)
+ 추가로 궁금해서 실험해본것 중에
10,000개의 데이터가 들어있는 테이블을 where 또는 limit 을 걸어서 3,000개를 조회하는 거랑
3,000개의 데이터가 들어있는 테이블을 조회하는거랑
속도 차이가 날까?
물론 전자는 10,000개의 데이터를 뒤져서 조회하는거니깐 속도차이가 난다가 맞는데
실험하기전까지는 쿼리 실행하는데 속도가 느렸다고 생각이 들지 않아서 의문이 들었다.
10,000개의 데이터와 3,000개의 데이터로 비교하기엔 속도차이가 나지 않아서
아까 320만개의 데이터로 비교해보았다
실험을 통해서 얻은 결과는
320만개의 데이터가 들어있는 테이블은 WHERE이나 ORDER BY를 쓰면 20000개의 데이터가 들어있는 테이블보다 시간이 더 걸린다는 것을 알 수 있었고
그러나
320만개의 데이터가 들어있는 테이블을 아무 조건없이 LIMIT 20000을 건다면
20,000개 데이터가 들어있는 TEST2 테이블이랑 실행속도 1.7초와 정확히 같았다.
즉 LIMIT는 1부터 시작해서 20000개의 ROW가 되었을때 바로 RETURN을 해주는 것이고
그러기 때문에 데이터가 320만개가 들어있어도 2만개 데이터가 들어있던 TEST2 테이블이랑 실행속도가 똑같을 수 밖에 없는 것이다.
요즘 쿼리를 짜는데 웬만하면 요구하는 화면 쿼리를 짤 수 있는 대신 이 쿼리가 효율적인가에 대해 고민이 생겼다.
이상으로 첫 번째 블로그 글을 마치겠다.
'SQL' 카테고리의 다른 글
[postgresql] with절로 insert,update,delete 를 활용 (0) | 2023.05.16 |
---|---|
[spring,postgresql] bit타입의 컬럼은 spring vo에 어떻게 설정해줘야하는가? (0) | 2023.04.13 |
pgadmin) ARRAY_POSITION 함수 , 이렇게도 ORDER BY가 된다? (0) | 2023.01.27 |
pgadmin 달력 요일 계산, 날짜 함수, 두 날짜간의 차이 등 (1) | 2023.01.14 |