Mysql 페이징 쿼리 방법: 1. [*] 대신 특정 필드를 사용합니다. 2. 먼저 인덱스를 검색합니다. 3. [between...and]를 사용합니다. 4. ID는 계속 증가해야 합니다. 이전 페이지에 기록하세요.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!