>데이터 베이스 >MySQL 튜토리얼 >MySQL에서 WHERE 절이 포함된 COUNT(*) 쿼리가 느린 이유는 무엇입니까?

MySQL에서 WHERE 절이 포함된 COUNT(*) 쿼리가 느린 이유는 무엇입니까?

DDD
DDD원래의
2024-11-02 09:20:03598검색

Why is My COUNT(*) Query with a WHERE Clause Slow in MySQL?

Where 절을 사용하는 MySQL의 느린 COUNT(*) 쿼리

COUNT(*)와 관련된 느린 MySQL 쿼리를 처리할 때 기본 쿼리 이해 요인이 가장 중요합니다. 이 특별한 경우에는 쿼리 자체나 EXPLAIN 문에서 긴 실행 시간이 즉시 드러나지 않습니다.

문제 이해

문제의 테이블인change_event, change_event_id 열에 클러스터된 기본 키가 있습니다. InnoDB에서는 별도의 인덱스 페이지에 상주하는 비클러스터형 인덱스와 달리 클러스터형 기본 키가 데이터 페이지의 데이터와 함께 저장됩니다.

클러스터형 기본 키에 대한 범위 스캔 문제

제시된 쿼리는 테이블의 상당 부분을 스캔해야 하는 클러스터형 기본 키에 대해 범위 스캔을 수행합니다. 데이터 페이지가 물리적으로 정렬된 순서로 저장되지 않아 추가 I/O 작업이 발생하므로 시간이 많이 걸릴 수 있습니다.

잠재적 솔루션

이를 최적화하려면 쿼리를 수행하려면 다음 전략 중 하나 또는 둘 다를 구현하는 것이 좋습니다.

  1. 테이블 최적화: OPTIMIZE TABLE을 실행하면 테이블 데이터 페이지가 기본 키를 기준으로 정렬되도록 재구성됩니다. 잠재적으로 범위 스캔 속도를 높일 수 있습니다.
  2. 추가 인덱스 생성:change_event_id 열에만 기본이 아닌 인덱스를 추가하면 MySQL이 데이터 페이지 대신 인덱스 페이지를 빠르게 스캔할 수 있습니다. 이는 상당한 성능 향상을 제공할 수 있습니다.

추가 참고:

change_event_id 열이 실제로 자동 증가 열인 경우 BIGINT UNSIGNED로 수정하는 것이 좋습니다. 제로부터 시작합니다. 이렇게 하면 부호 있는 정수 오버플로와 관련된 잠재적인 문제를 방지할 수 있습니다.

위 내용은 MySQL에서 WHERE 절이 포함된 COUNT(*) 쿼리가 느린 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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