CREATE TABLE [dbo].[PAGING_10000000](
[row_id] [bigint] NOT NULL,
[contents] [varchar](50) NOT NULL,
[upd_dt] [char](10) NOT NULL,
CONSTRAINT [PK_PAGING_10000000] PRIMARY KEY CLUSTERED
(
[row_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
DECLARE @row_no int
SET @row_no = 0
WHILE @row_no < 10000000
BEGIN
INSERT INTO dbo.PAGING_10000000 (row_id, contents, upd_dt)
VALUES (@row_no, '1천만건 게시물입니다.', GETDATE())
SET @row_no = @row_no + 1
END
SELECT TOP 10 *
FROM PAGING_10000000
WHERE row_id IS NOT NULL
-- 첫페이지는 아래 구문을 제거합니다.
AND row_id > (SELECT MAX(D.page_key)
FROM (SELECT TOP 9999990 row_id AS page_key -- 9999990번째 페이지
FROM PAGING_10000000
WHERE row_id IS NOT NULL
ORDER BY row_id ASC) AS D)
-- 첫페이지는 위의 구문을 제거합니다.
ORDER BY row_id ASC
힘들게 함 만들어 보았는데요.
위의 쿼리를 보시고 NOT IN이나 순정렬/역정렬 등을 사용한 쿼리에 비해 어떨지 단호한 평가를 부탁드립니다.
테스트 결과는 몇초정도 빨랐습니다.
감사합니다.
|