Day 4 : 두번째로 큰 항목 구하기

DORA·2022년 5월 12일
0

django-orm

목록 보기
4/6

11. 두번째로 큰 항목은 어떻게 구하죠?

>>> user = User.objects.order_by('-last_login')[1] // Second Highest record w.r.t 'last_login'
>>> user.first_name
'Raghu'
>>> user = User.objects.order_by('-last_login')[2] // Third Highest record w.r.t 'last_login'
>>> user.first_name

파이썬의 인덱싱 연산을 사용하여 구할 수 있다.

User.objects.order_by('-last_login')[1]

인덱싱을 사용하면, mysql 기준 LIMIT OFFSET 질의문을 생성한다.

SELECT "auth_user"."id",
       "auth_user"."password",
       "auth_user"."last_login",
       "auth_user"."is_superuser",
       "auth_user"."username"
FROM "auth_user"
ORDER BY "auth_user"."last_login" DESC
LIMIT 1
OFFSET 1

보통 이 LIMIT OFFSET 을 이용해 pagination을 구현하게 된다.
(장고는 Paginator 를 제공하고 있으니 알아서 해준다)

지정된 OFFSET까지 모두 정렬한 후 LIMIT에 지정한 갯수로 자르는 방식이기 때문에 극단적으로 "1억번 째 글을 찾고 싶다"고 하면 성능에 영향을 줄 수 있다.

profile
리버풀이 리그 우승한다

0개의 댓글