주요 데이터베이스의 분할 질의 기술 구현 방법

大家讲道理
풀어 주다: 2016-11-12 10:37:40
원래의
3348명이 탐색했습니다.

데이터베이스 분할 쿼리 기술 구현


분할 쿼리는 데이터를 쿼리할 때 조건에 맞는 모든 데이터를 한꺼번에 가져오지는 않는다는 의미입니다. 메모리. 한 번에 모든 데이터를 쿼리하면 쿼리 효율성이 떨어지며 클라이언트에 대한 응답 시간이 오래 걸립니다. 즉, 분할된 쿼리는 현재 페이지의 크기에 따라 각 쿼리의 결과가 각 페이지에 표시되는 숫자임을 의미합니다. 쿼리 효율성이 크게 향상됩니다

예를 들어 데이터베이스에 100,000개의 데이터가 있고 페이지당 20개만 표시됩니다. 페이지 번호만 쿼리하고 다른 페이지는 쿼리하지 않습니다. 즉, 매번 20개의 데이터만 쿼리합니다.

SQL Server

N개의 레코드를 가져옵니다. Top 키워드를 사용하여 데이터베이스 테이블의 M번째 레코드부터 시작: Select 문에 top이 있으면 정렬된 결과 집합에서 선택하는 order by도 있습니다.

SELECT *

FROM ( SELECT Top N *
FROM (SELECT Top (M + N - 1) * FROM 表名称 Order by 主键 desc) t1 ) t2
Order by 主键 asc
로그인 후 복사

예를 들어 Sys_option 테이블(기본 키는 sys_id), 10개의 레코드에서 또는 20개의 레코드를 검색하는 경우 명령문은 다음과 같습니다.

SELECT *
FROM ( SELECT TOP 20 *
 FROM (SELECT TOP 29 * FROM Sys_option order by sys_id desc) t1) t2
Order by sys_id asc
로그인 후 복사

Oralce 데이터베이스

데이터베이스 테이블의 M번째 레코드부터 시작하여 N개의 레코드를 검색합니다.

SELECT *
FROM (SELECT ROWNUM r,t1.* From 表名称 t1 where rownum < M + N) t2
where t2.r >= M
로그인 후 복사

예를 들어 Sys_option 테이블(기본 키)의 10개 레코드 또는 20개 레코드에서 sys_id), 구문은 다음과 같습니다.

SELECT *
FROM (SELECT ROWNUM R,t1.* From Sys_option where rownum < 30 ) t2
Where t2.R >= 10
로그인 후 복사

MySQL 데이터베이스

내 sql 데이터베이스는 가장 간단하며 mysql의 LIMIT 함수인 LIMIT [offset, ] 행. 데이터베이스 테이블의 M개 레코드에서 시작하여 N개 레코드를 검색하는 문은 다음과 같습니다.

다음은 코드 조각입니다.

SELECT * FROM 表名称 LIMIT M,N
로그인 후 복사

예: Sys_option 테이블(기본 키는 sys_id)에서 10개 레코드를 검색할지 아니면 20개 레코드를 검색할지 여부에 대한 설명은 다음과 같습니다.

다음은 코드 조각입니다.

select * from sys_option limit 10,20
로그인 후 복사

I 이전에는 ORACLE을 사용하여 페이징 조건으로 ROWNUM을 사용할 수 있었지만 아무리 효율적이더라도 구현하기가 더 쉬웠습니다.

그럼 ACCESS는 페이징 기능을 어떻게 구현하나요? 일부 정보를 읽은 후에는 약간 복잡하고 많은 코드를 작성해야 한다는 것을 여러분과 공유할 수 있는 좋은 방법이 생각났습니다. 바로 SQL 문입니다.

select top 15 * from YOURTABLE where ID not. in (YOURTABLE order by ID desc에서 상위 15개 ID 선택) order by ID desc

좀 설명하자면, 15는 페이지당 행 수, YOURTABLE은 테이블 이름, ID는 기본 키 필드입니다. 테이블(물론 other 를 사용할 수도 있음), 위의 SQL 문은 두 번째 페이지(두 번째 15개 레코드)를 검색하는 것입니다. 페이지 번호를 변경하려면 다음 15를 해당 배수로 변경하면 됩니다.

이렇게 페이징 기능이 없는 DataRepeater 플러그인과 결합하여 5를 2로 나눈 3획으로 메모장 프로그램을 작성했습니다. 비웃지 마세요. 저는 .NET이 처음입니다. 기술을 연습하기 위해 먼저 이 글을 쓰겠습니다.

관심 있으신 분은 메시지를 남겨주시면 코드를 올려드리겠습니다.

참고:

처음 15개의 레코드를 가져오는 경우 SQL 문을 다음과 같이 작성할 수 없습니다.

  select top 15  *  from YOURTABLE where ID not in(select top 0 ID from YOURTABLE order by ID desc)  order by ID desc
로그인 후 복사

다음과 같이 작성하면 됩니다. 이렇게 하면 오류가 보고됩니다. 직접 작성:

select top 15  *  from YOURTABLE   order by ID desc
로그인 후 복사

제한 사항을 추가하려면 다음과 같이 작성하면 됩니다.

select top 15  *  from YOURTABLE where ID not in(select top 15 ID from YOURTABLE where  NAME=&#39;wallimn&#39; order by ID desc) and NAME=&#39;wallimn&#39;  order by ID desc
로그인 후 복사
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!