database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 7295 게시물 읽기
No. 7295
oracle의 rownum=1 로 stop key 만드는 방법
작성자
sqlsql
작성일
2023-06-14 14:06ⓒ
2023-06-14 17:09ⓜ
조회수
651

안녕하세요.... 


oracle 사용자 입니다. 


오라클에서 전체 건수를 가져 오는 쿼리를 보통 부분 범위 처리 하기 위해 stop key를 사용합니다.

예를 들면.. 약 1천만건이 있는 테이블이 있다면...


 select num

   from table 

 where rownum =1 --- stop key

order by num desc   --- 인덱스를 desc 하여 맨 마지막에서 첫 번째 값을 가져 오면 full scan을 하지 않음.. 단 num에 index가 있어야 함.


이런 로직을 mssql에서 full scan 없이 구현 할 방법이 없나요?

감사합니다. 

이 글에 대한 댓글이 총 2건 있습니다.

num에 clustered index가 있다고 가정할 때 


select top (1) num 

from table

order by num desc 


 

.님이 2023-06-14 16:23에 작성한 댓글입니다. Edit
-- 1. 기존 오라클 구문도 잘못 사용한 구문(이렇게 한번 감싸 줘야 올바른 구문)
SELECT *
  FROM (SELECT num
          FROM table 
         ORDER BY num DESC
        )
 WHERE ROWNUM = 1
;

-- 2. MSSQL 전용 기능인 TOP 을 이용하는 방안.
SELECT TOP(1) num
  FROM table 
 ORDER BY num DESC
;

-- 3. 공통 기능인 ROW_NUMBER() 를 이용하는 방안.
SELECT *
  FROM (SELECT num
             , ROW_NUMBER() OVER(ORDER BY num DESC) rn
          FROM table
        ) a
 WHERE rn = 1
;

 
마농(manon94)님이 2023-06-19 13:20에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
7298시간으로 데이터 형 변환 시 문제 [2]
시간 타입 문제
2023-06-26
734
7297대용량 데이터 조회 관련 성능 이슈
도와주세요..
2023-06-22
674
7296order by 시 속도 저하..
suny
2023-06-21
703
7295oracle의 rownum=1 로 stop key 만드는 방법 [2]
sqlsql
2023-06-14
651
7294index를 태우기 위해 부정의 의미를 긍정의 의미로 바꾸는 방법 [1]
sdler
2023-06-13
559
7293대용량 데이터 처리 [3]
sqler
2023-05-30
671
7292standard에디션 에서 파티션테이블 사용가능한지요 ? [1]
이규동
2023-05-23
731
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다