MySQL 에서 SQL 페이지 조회 의 몇 가지 실현 방법 과 장단 점

[SQL]SQL 페이지 별 조회 요약
개발 과정 에서 페이지 별 수 요 를 자주 만 났 으 니 오늘 여기 서 정리 해 보 자.
쉽게 말 하면 방법 은 두 가지 가 있 는데 하 나 는 소스 에서 제어 하고 하 나 는 엔 드 에서 제어 한다.원본 제어 페이지 논 리 를 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 보다 못 하 다.
적용:대부분의 페이지 조회 수요.
이상 은 자신 이 정리 한 졸견 입 니 다.성능 비 교 는 인터넷 자료 와 개인 판단 에서 나 왔 고 깊이 실험 하지 않 았 습 니 다.부당 한 점 은 모두 가 지적 해 주 십시오.
MySQL 에서 페이지 를 나 누 어 조회 하 는 몇 가지 실현 방법 과 장단 점 에 관 한 글 을 소개 합 니 다.MySQL 에서 페이지 를 나 누 어 조회 하 는 방법 에 관 한 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부탁드립니다.

좋은 웹페이지 즐겨찾기