>  기사  >  데이터 베이스  >  MySQL의 기본 키에 대한 범위 검색과 관련된 느린 \"SELECT COUNT(*)\" 쿼리를 최적화하는 방법은 무엇입니까?

MySQL의 기본 키에 대한 범위 검색과 관련된 느린 \"SELECT COUNT(*)\" 쿼리를 최적화하는 방법은 무엇입니까?

DDD
DDD원래의
2024-10-29 18:49:02968검색

How to Optimize a Slow

MySQL의 느린 "SELECT COUNT(*)" 쿼리 최적화

대규모 테이블을 쿼리할 때 WHERE 절. 범위 기준을 사용하는 "SELECT COUNT(*)" 쿼리에 시간이 너무 오래 걸리는 구체적인 사례를 분석해 보겠습니다.

"EXPLAIN"에서 제공하는 설명을 보면 범위 스캔이 발생하고 있음을 알 수 있습니다. 그러나 전체 개수와 필터링된 개수 사이의 성능 불일치는 여전히 설명되지 않습니다.

테이블 정의를 검토한 결과 "change_event_id" 열이 클러스터 형식으로 저장되는 기본 키 역할을 한다는 것을 알 수 있습니다. 이는 기본 키 값이 동일한 디스크 페이지에 데이터와 함께 저장된다는 의미입니다. 결과적으로 기본 키에 대한 범위 스캔을 수행하려면 모든 데이터 페이지를 읽어야 합니다.

성능을 향상하려면 다음 전략을 고려하십시오.

  • 테이블 최적화: "OPTIMIZE TABLE"을 실행하여 데이터 페이지를 정렬된 순서로 재구성하면 잠재적으로 범위 스캔이 가속화될 수 있습니다.
  • 보조 인덱스 생성: "change_event_id에 기본이 아닌 인덱스를 구체적으로 정의합니다. " 열. 이렇게 하면 별도의 인덱스 구조가 생성되어 해당 열에 대한 범위 스캔을 보다 효율적으로 실행할 수 있습니다.

또한 "change_event_id" 열이 "bigint unsigned"로 수정되는 경우 이를 권장합니다. 0부터 증가합니다. 이렇게 하면 오버플로 없이 더 큰 값을 저장할 수 있습니다.

이러한 최적화를 구현하면 범위 기준을 사용하는 "SELECT COUNT(*)" 쿼리의 성능이 크게 향상되어 전체 카운트와 비슷해집니다. .

위 내용은 MySQL의 기본 키에 대한 범위 검색과 관련된 느린 \"SELECT COUNT(*)\" 쿼리를 최적화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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