크지만 좁은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!