>  기사  >  데이터 베이스  >  LIMIT 절에서 큰 OFFSET을 사용하여 MySQL 쿼리를 최적화하는 방법은 무엇입니까?

LIMIT 절에서 큰 OFFSET을 사용하여 MySQL 쿼리를 최적화하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-19 08:57:02239검색

How to Optimize MySQL Queries with Large OFFSET in LIMIT Clause?

LIMIT 절의 큰 OFFSET으로 MySQL 성능 향상

MySQL SELECT 쿼리의 LIMIT 절에 상당한 오프셋을 적용하면서 성능 저하 발생 ? 이 문제는 'm'으로 표시되는 오프셋이 특정 임계값(예: 1,000,000)을 초과하여 쿼리 실행이 느려질 때 발생합니다.

특정 테이블 시나리오에서는 LIMIT 절을 사용하는 것이 필수적이지만 방법이 있습니다. ID 범위('id > 1,000,000 제한 n')를 기반으로 한 필터링과 같은 대안을 사용하지 않고 성능을 최적화합니다.

인덱싱 테이블 기반 최적화

대상 테이블의 기본 키와 순차적 관계를 설정하는 인덱싱 테이블입니다. 이 인덱싱 접근 방식은 쿼리 성능을 크게 향상시킬 수 있습니다.

  1. 인덱싱 테이블 생성:

    CREATE TABLE seq (
       seq_no int not null auto_increment,
       id int not null,
       primary key(seq_no),
       unique(id)
    );
  2. 채우기 순서:

    TRUNCATE seq;
    INSERT INTO seq (id) SELECT id FROM mytable ORDER BY id;
  3. 인덱싱을 사용하여 최적화된 쿼리:
    1,000,000 오프셋에서 1000개 행을 가져오려면:

    SELECT mytable.*
    FROM mytable
    INNER JOIN seq USING(id)
    WHERE seq.seq_no BETWEEN 1000000 AND 1000999;

이 수정된 쿼리는 인덱싱 테이블을 활용하여 순차 스캔을 우회하고 오프셋을 기반으로 원하는 행을 효율적으로 검색하여 성능을 크게 향상시킵니다.

위 내용은 LIMIT 절에서 큰 OFFSET을 사용하여 MySQL 쿼리를 최적화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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