728x90
웹 사이트를 개발할 때 가장 고민되는 부분 중 하나가 페이징입니다. 보통 MS-SQL 에서는 중첩 쿼리를 이용하여 TOP n 스타일의 쿼리를 하는 경우가 많은데, 퍼포먼스 측면에서 아주 쥐약인 경우가 많습니다. 오늘 소개해 드리는 페이징 쿼리는 일단 속도가 그리 느리지 않고 중첩 쿼리에 비해 부하가 적을 것으로 추정(!)하고 있습니다 ^^;

with rn
as
(
select EmailAddress, ROW_NUMBER() over (order by FirstName desc) as rn
  from Person.Contact
)
select FirstName, LastName, rn
  from Person.Contact join rn on Person.Contact.EmailAddress = rn.EmailAddress
 where rn between 5 and 10
with 문을 이용하여 ROW_NUMBER() 로 항목에 넘버링을 한 다음 필요한 구간을 where 절에 기술하여 페이징하는 방식입니다. Execution Plan 으로 봤을 때 비용이 많이 들지 않는 것 같습니다만 실제로 효과가 있는지는 실데이터로 적용해서 돌려봐야할 것 같습니다 ^^ 참고로 위의 예제는 AdventureWorks  샘플 DB 를 사용했습니다.

- NoPD -
728x90

+ Recent posts