집 >데이터 베이스 >MySQL 튜토리얼 >성능을 향상하고 디스크 I/O를 줄이기 위해 느린 MySQL 쿼리를 어떻게 최적화할 수 있습니까?
실행 시간 및 디스크 쓰기를 줄이기 위해 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 출력에 따르면 쿼리는 전체 쿼리를 수행하고 있습니다. 1,700만 개 이상의 행이 포함된 Poster_prodcat 테이블에 대한 테이블 스캔입니다. 이는 과도한 실행 시간의 원인이 됩니다.
쿼리 성능을 최적화하기 위해 다음 변경 사항을 구현할 수 있습니다.
정규화 및 인덱싱:
업데이트된 스키마의 예는 다음과 같습니다.
CREATE TABLE poster ( poster_id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL UNIQUE, PRIMARY KEY (poster_id) ) ENGINE=InnoDB; CREATE TABLE category ( cat_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL UNIQUE, PRIMARY KEY (cat_id) ) ENGINE=InnoDB; CREATE TABLE poster_category ( cat_id MEDIUMINT UNSIGNED NOT NULL, poster_id INT UNSIGNED NOT NULL, PRIMARY KEY (cat_id, poster_id), INDEX (poster_id) -- Clustered composite index ) ENGINE=InnoDB;
데이터가 정규화되고 인덱싱되면 , 쿼리가 훨씬 빠르게 수행되어 실행 시간이 크게 단축됩니다.
위 내용은 성능을 향상하고 디스크 I/O를 줄이기 위해 느린 MySQL 쿼리를 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!