[SQL] SQL 페이지 별 조회 요약

6132 단어 페이지 별 조회
개발 과정 에서 페이지 별 수 요 를 자주 만 났 으 니 오늘 여기 서 정리 해 보 자.    쉽게 말 하면 방법 은 두 가지 가 있 는데 하 나 는 소스 에서 제어 하고 하 나 는 엔 드 에서 제어 한다.원본 제어 페이지 논 리 를 SQL 층 에 놓 기;엔 드 에서 모든 데 이 터 를 한꺼번에 가 져 오 는 것 을 제어 하고 페이지 논 리 를 UI 에 놓 습 니 다 (예 를 들 어 GridView).분명히 말단 통제 개발 의 난이도 가 낮 고 소 규모 데이터 에 적합 하지만 데이터 양 이 증가 할 때 성능 과 IO 소 모 는 받 아들 일 수 없다.원천 적 인 통 제 는 성능 과 개발 난이도 에 있어 비교적 균형 을 이 루 고 대부분 업무 장면 에 적응한다.그 밖 에 객관 적 인 상황 (성능 요구, 소스 와 엔 드 의 자원 점용 등) 에 따라 소스 와 엔 드 사이 에 한 층 을 더 하고 특수 알고리즘 과 기술 을 응용 하여 처리 할 수 있다.다음은 주로 SQL 의 페이지 를 논의 합 니 다.    페이지 를 나 누 는 문 제 는 조건 을 만족 시 키 는 질서 있 는 데이터 에서 현재 보 여 줘 야 할 부분 을 캡 처 하 는 것 이다.실제로 각종 데이터 베 이 스 는 페이지 문 제 를 고려 하여 MySql 의 LIMIT, Oracle 의 ROWNUM 과 ROW 등 전략 을 내 장 했 습 니 다.NUMBER (), SqlServer 의 TOP 과 ROWNUMBER (), 이 를 바탕 으로 우 리 는 일련의 페이지 를 나 누 는 방법 을 얻 을 수 있 습 니 다.
1. MySql 의 LIMIT 와 Oracle 의 ROWNUM 을 바탕 으로 반환 구간 을 직접 제한 할 수 있 습 니 다 (MySql 의 경우 Oracle 의 ROWNUM 을 사용 할 때 하위 조 회 를 사용 하 는 것 에 주의 하 십시오). 방법 1. 반환 구간 을 직접 제한 합 니 다.
SELECT * FROM table WHERE      ORDER BY      LIMIT ((  -1)*   ),   ;

장점: 쓰기 가 간단 하 다.단점: 페이지 와 페이지 크기 가 너무 크 면 성능 이 현저히 떨어진다.적용: 데이터 양 이 많 지 않 습 니 다.
2. LIMIT (MySql), ROWNUM (Oracle), TOP (SqlServer) 을 바탕 으로 되 돌아 오 는 줄 수 를 제한 할 수 있 기 때문에 다음 과 같은 두 가지 일반적인 방법 (SqlServer 를 예 로 들 면) 을 얻 을 수 있 습 니 다. 방법 2. NOT IN
SELECT TOP     * FROM table WHERE    NOT IN
(
    SELECT TOP (  -1)*       FROM table WHERE      ORDER BY     
)
ORDER BY     

장점: 유 니 버 설 이 강하 다.단점: 데이터 양 이 많 을 때 뒤로 넘 기 고 NOT IN 의 데이터 가 너무 많 으 면 성능 에 영향 을 줍 니 다.적용: 데이터 양 이 많 지 않 습 니 다.
방법 3. MAX
SELECT TOP     * FROM table WHERE      AND id >
(
    SELECT ISNULL(MAX(id),0) FROM 
    (
        SELECT TOP ((  -1)*   ) id FROM table WHERE      ORDER BY id 
    ) AS tempTable
) 
ORDER BY id    

장점: 속도 가 빠 르 고 특히 id 가 메 인 키 일 때.단점: 적용 면 이 좁 아 정렬 조건 이 단일 하고 비교 가 가능 합 니 다.적용: 간단 한 정렬 (특수 한 경우 에 도 유사 한 비교 가능 한 값 으로 변환 하려 고 시도 할 수 있 습 니 다).
3. SqlServer 와 Oracle 기반 ROWNUMBER () 는 데 이 터 를 되 돌려 주 는 줄 번 호 를 얻 을 수 있 습 니 다. 이 를 바탕 으로 반환 제한 구간 에서 다음 과 같은 방법 을 얻 을 수 있 습 니 다 (SqlServer 를 예 로 들 면): 방법 4, ROWNUMBER()
SELECT TOP     * FROM 
(
    SELECT TOP (  *   ) ROW_NUMBER() OVER (ORDER BY     ) AS RowNum, * FROM table WHERE     
) AS tempTable
WHERE RowNum BETWEEN (  -1)*   +1 AND   *   
ORDER BY RowNum

장점: 데이터 양 이 많 을 때 NOT IN 보다 우세 합 니 다.단점: 작은 데 이 터 는 NOT IN 보다 못 하 다.적용: 대부분의 페이지 조회 수요.
이상 은 자신 이 정리 한 졸견 입 니 다. 성능 비 교 는 인터넷 자료 와 개인 판단 에서 나 왔 고 깊이 실험 하지 않 았 습 니 다. 부당 한 점 은 모두 가 지적 해 주 십시오.

좋은 웹페이지 즐겨찾기