>데이터 베이스 >MySQL 튜토리얼 >MySQL 쿼리의 높은 LIMIT OFFSET 값이 왜 이렇게 느린가요?

MySQL 쿼리의 높은 LIMIT OFFSET 값이 왜 이렇게 느린가요?

DDD
DDD원래의
2024-12-15 11:14:11671검색

Why Are High LIMIT OFFSET Values in MySQL Queries So Slow?

더 높은 LIMIT OFFSET이 MySQL 쿼리 성능에 미치는 영향

LIMIT 절과 큰 테이블이 포함된 SELECT 쿼리를 실행할 때 높은 LIMIT OFFSET을 설정 오프셋 값을 사용하면 쿼리 실행 시간이 크게 느려질 수 있습니다. 이 동작은 기본 키와 함께 ORDER BY 절을 사용할 때 특히 두드러집니다.

예를 들어 1,600만 개 이상의 레코드(2GB 크기)가 있는 "대형"이라는 테이블을 생각해 보세요. 다음과 같은 쿼리는

SELECT * FROM large ORDER BY `id` LIMIT 0, 30

다음과 같이 오프셋이 더 높은 쿼리에 비해 훨씬 빠르게 실행될 수 있습니다.

SELECT * FROM large ORDER BY `id` LIMIT 10000, 30

두 쿼리 모두 동일한 수의 레코드(30)를 검색합니다. ), 이는 성능 차이가 ORDER BY 연산의 오버헤드로 인한 것이 아님을 나타냅니다.

쿼리를 최적화하려면 high 사용을 최소화하는 것이 좋습니다. LIMIT개의 오프셋. 대신 WHERE 절을 사용하여 알려진 식별자를 기반으로 레코드를 선택하는 것이 좋습니다. 그러면 오프셋이 0이 됩니다.

예를 들어, 최근 30개 행을 검색하는 것이 목표라면 다음 쿼리를 사용할 수 있습니다. :

SELECT * FROM large WHERE id > last_known_id LIMIT 0, 30

마지막으로 알려진 ID(last_known_id)의 기록을 유지함으로써 이 접근 방식을 사용하면 쿼리가 항상 0의 오프셋에서 시작될 수 있으므로 크게 향상됩니다. 공연.

위 내용은 MySQL 쿼리의 높은 LIMIT OFFSET 값이 왜 이렇게 느린가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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