> 데이터 베이스 > MySQL 튜토리얼 > 인덱스 및 통계 캐싱을 사용하여 InnoDB에서 COUNT(*) 성능을 어떻게 최적화할 수 있습니까?

인덱스 및 통계 캐싱을 사용하여 InnoDB에서 COUNT(*) 성능을 어떻게 최적화할 수 있습니까?

DDD
풀어 주다: 2024-11-03 12:52:30
원래의
475명이 탐색했습니다.

How Can I Optimize COUNT(*) Performance on InnoDB with Indices and Statistical Caching?

인덱스를 사용하여 InnoDB에서 COUNT(*) 성능 최적화

크지만 좁은 InnoDB 테이블을 처리할 때 COUNT(*) 쿼리 실행이 매우 느릴 수 있습니다. 이는 ~900만 개의 레코드로 구성된 테이블에서 6초의 COUNT(*) 작업이 발생한 시나리오에서 발생했습니다.

MySQL 문서에 따르면 InnoDB가 계산 작업에 인덱스를 사용하도록 강제하면 상당한 성능을 얻을 수 있습니다. 이득. 이는 쿼리에서 USE INDEX(index_name) 구문을 사용하여 수행됩니다.

주어진 예에서는 다음 쿼리가 사용되었습니다.

<code class="sql">SELECT COUNT(id) FROM perf2 USE INDEX (PRIMARY);</code>
로그인 후 복사

그러나 인덱스를 사용했음에도 불구하고 실적은 형편없었다. 추가 문제 해결 옵션을 찾다가 MySQL 5.1.6에 이벤트 스케줄러 및 통계 캐싱과 관련된 효율적인 솔루션이 도입되었다는 사실을 발견했습니다.

이벤트 스케줄러 및 통계 캐싱

이벤트 스케줄러를 활용하고 통계 테이블을 사용하면 COUNT(*) 작업이 크게 최적화될 수 있습니다. 이 프로세스에는 카운트 데이터를 저장하기 위한 통계 테이블 생성이 포함됩니다.

<code class="sql">CREATE TABLE stats (`key` VARCHAR(50) NOT NULL PRIMARY KEY, `value` VARCHAR(100) NOT NULL);</code>
로그인 후 복사

이후, 현재 카운트로 통계 테이블을 정기적으로 업데이트하는 이벤트가 생성됩니다.

<code class="sql">CREATE EVENT update_stats
ON SCHEDULE
  EVERY 5 MINUTE
DO
  INSERT INTO stats (`key`, `value`)
  VALUES ('data_count', (SELECT COUNT(id) FROM data))
  ON DUPLICATE KEY UPDATE value=VALUES(value);</code>
로그인 후 복사

이 자체 -포함된 솔루션은 사용자 정의 가능한 새로 고침 간격을 허용하여 저장된 개수의 정확성과 신선도를 보장합니다. 완벽하지는 않지만 기존 방법에 비해 상당한 성능 향상을 제공합니다.

위 내용은 인덱스 및 통계 캐싱을 사용하여 InnoDB에서 COUNT(*) 성능을 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿