>  기사  >  데이터 베이스  >  mysql에서 페이징 쿼리를 구현하는 방법

mysql에서 페이징 쿼리를 구현하는 방법

coldplay.xixi
coldplay.xixi원래의
2020-10-23 09:23:524895검색

Mysql 페이징 쿼리 방법: 1. [*] 대신 특정 필드를 사용합니다. 2. 먼저 인덱스를 검색합니다. 3. [between...and]를 사용합니다. 4. ID는 계속 증가해야 합니다. 이전 페이지에 기록하세요.

mysql에서 페이징 쿼리를 구현하는 방법

Mysql 페이징 쿼리 방법:

간단한 설명

  • 페이지 쿼리는 일반적으로 MySQL에서 #{limit}, #{offset} 제한을 통해 수행됩니다.

  • 테이블에 레코드가 많고 페이지 수(#{limit})가 커지면 페이징 쿼리의 효율성이 느려집니다.

  • 속도가 느려지는 이유는 페이징 쿼리 중에 제한 + 오프셋 레코드를 먼저 쿼리한 다음 후속 오프셋 레코드를 가로채기 때문입니다.

  • 이 기사에서는 페이징 쿼리를 최적화하는 방법을 기록하기 위해 실제 1억 4천만 개의 테이블 big_table을 예로 들어 설명합니다.

테스트 지침

  • 테스트 테이블: big_table, 데이터 양: 1억 4천만개.

원래 SQL(4500ms)

-- 原始分页查询,耗时:4500ms
select * 
from big_table
limit 2000000,10;

느린 이유:

1. 쿼리 조건은 *

2입니다. 제한 = 2000000이 너무 큽니다.

최적화 1(권장): * 대신 특정 필드를 사용하세요. (1600ms)

-- 用明确字段代替*,耗时:1600ms
select id,uid,media_id,media_name,news_id,comment 
from big_table
limit 2000000,10;

최적화 2: 인덱스 먼저 검색(450ms)

-- 方法1:先对索引进行分页查询,耗时:450ms
select * from big_table AS h inner join
 (select id from big_table
  limit 2000000,10) AS ss 
 on h.id = ss.id;
-- 方法2:先查询出起始位置的索引,耗时:450ms
select * from big_table
where id > (
select id from big_table limit 2000000,1
)
limit 10;

최적화 3: ~~(5ms) 사이

제한 사항: ID는 지속적으로 증가해야 합니다.

-- 上一页保留最后一条记录所在id,耗时:5ms
select * from big_table
where id between 4882489 and 4882489 + 10 ;

최적화 4(권장) : 이전 페이지 기록의 id를 유지(5ms)

제한 사항: 이전 페이지에서 마지막 기록의 id를 유지해야 합니다

-- 上一页需要保留最后一条记录所在id,耗时:5ms
select * from big_table
where id > 4882488
limit 10;

더 관련 무료 학습 권장사항: mysql tutorial(동영상)

위 내용은 mysql에서 페이징 쿼리를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.