MySQL LIMIT 쿼리의 OFFSET이 쿼리 성능에 미치는 영향
MySQL에서 대규모 데이터 세트로 작업할 때 OFFSET과 함께 LIMIT를 사용하면 상당한 영향을 미칠 수 있습니다. 쿼리 성능. 이는 PRIMARY KEY를 ORDER BY 기준으로 사용할 때 특히 분명합니다. 예를 들어, OFFSET이 더 작은 다음 쿼리는
SELECT * FROM large ORDER BY `id` LIMIT 0, 30
OFFSET이 더 큰 쿼리보다 훨씬 빠르게 실행됩니다.
SELECT * FROM large ORDER BY `id` LIMIT 10000, 30
두 쿼리가 모두 동일한 항목을 검색하더라도 이는 사실입니다. 레코드 수(30).
OFFSET 이해 Impact
이러한 현상을 이해하려면 MySQL의 쿼리 실행 계획을 살펴봐야 합니다. OFFSET과 함께 ORDER BY를 사용할 때 MySQL은 먼저 지정된 기준에 따라 전체 테이블을 정렬해야 합니다. 그런 다음 지정된 레코드 수(OFFSET)를 건너뛰고 원하는 레코드 수(LIMIT)를 검색합니다. 이 정렬 프로세스는 OFFSET이 증가하고 테이블 크기가 커짐에 따라 점점 더 많은 비용이 듭니다.
최적화 기법
이러한 쿼리를 최적화하려면 범위 기반을 활용하는 것이 좋습니다. OFFSET에만 의존하는 것이 아닌 검색 접근 방식을 사용합니다. 이는 이전 가져오기의 마지막 레코드 ID를 보유하고 WHERE 조건을 추가하여 달성할 수 있습니다.
WHERE id > lastId LIMIT 0, 30
0 OFFSET을 유지하고 이전 세트의 마지막 ID를 기반으로 레코드를 검색함으로써 비용이 많이 드는 비용을 효과적으로 제거합니다. 정렬작업. 결과적으로, 특히 대규모 테이블의 경우 쿼리 성능이 크게 향상됩니다.
위 내용은 LIMIT 쿼리의 MySQL OFFSET은 성능에 어떤 영향을 미치며 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!