> 데이터 베이스 > MySQL 튜토리얼 > 웹 페이지 성능을 향상시키기 위해 느린 MySQL SELECT 쿼리를 어떻게 최적화할 수 있습니까?

웹 페이지 성능을 향상시키기 위해 느린 MySQL SELECT 쿼리를 어떻게 최적화할 수 있습니까?

Linda Hamilton
풀어 주다: 2024-12-30 08:39:14
원래의
519명이 탐색했습니다.

How Can We Optimize a Slow MySQL SELECT Query to Improve Web Page Performance?

성능 향상을 위해 최적화된 느린 MySQL 선택 쿼리

이 MySQL 쿼리는 복잡성과 데이터 볼륨으로 인해 지연에 직면했습니다. 이를 완화하려면 관련 테이블 간의 관계를 이해하는 것이 중요합니다.

  • poster_data: 개별 포스터에 데이터를 저장합니다.
  • poster_categories: 사용 가능한 모든 카테고리를 나열합니다(예: 영화, art).
  • poster_prodcat: 포스터를 해당 카테고리에 연결하며, 단일 포스터에 여러 항목이 가능합니다.

원래 쿼리는 다음과 같습니다. 특히 웹 페이지에서 사용될 때 긴 실행 시간 생성:

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

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