성능 향상을 위해 최적화된 느린 MySQL 선택 쿼리
이 MySQL 쿼리는 복잡성과 데이터 볼륨으로 인해 지연에 직면했습니다. 이를 완화하려면 관련 테이블 간의 관계를 이해하는 것이 중요합니다.
원래 쿼리는 다음과 같습니다. 특히 웹 페이지에서 사용될 때 긴 실행 시간 생성:
SELECT * FROM poster_prodcat, poster_data, poster_categories WHERE poster_data.apnumber = poster_prodcat.apnumber AND poster_categories.apcatnum = poster_prodcat.apcatnum AND poster_prodcat.apcatnum='623' ORDER BY aptitle ASC LIMIT 0, 32
실행 계획 분석:
'explain' 출력에서 쿼리의 성능 병목 현상이 식별되었습니다:
[Explain 이미지 링크]
관찰한 바와 같이 쿼리는 데이터를 디스크에 써야 했으며 이는 상당한 영향을 미쳤습니다. 속도.
해결책:
이 문제를 해결하기 위해 복합 인덱싱을 사용하여 수정된 스키마가 설계되었습니다. 이 새로운 구조는 성능이 크게 향상되었음을 보여주었습니다.
DROP TABLE IF EXISTS poster; CREATE TABLE poster ( poster_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL UNIQUE ) ENGINE = INNODB; DROP TABLE IF EXISTS category; CREATE TABLE category ( cat_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL UNIQUE ) ENGINE = INNODB; DROP TABLE IF EXISTS poster_category; CREATE TABLE poster_category ( cat_id MEDIUMINT UNSIGNED NOT NULL, poster_id INT UNSIGNED NOT NULL, PRIMARY KEY (cat_id, poster_id) -- Note the clustered composite index !! ) ENGINE = INNODB;
복합 인덱스를 적용한 다음 수정된 쿼리는 매우 빠른 결과를 얻었습니다.
SELECT p.*, c.* FROM poster_category pc INNER JOIN category c ON pc.cat_id = c.cat_id INNER JOIN poster p ON pc.poster_id = p.poster_id WHERE pc.cat_id = 623 ORDER BY p.name LIMIT 32;
이 최적화된 접근 방식으로 문제를 효과적으로 해결했습니다. 성능 문제로 인해 애플리케이션 웹 페이지가 응답성이 뛰어나고 사용자 친화적이게 됩니다.
위 내용은 웹 페이지 성능을 향상시키기 위해 느린 MySQL SELECT 쿼리를 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!