> 데이터 베이스 > MySQL 튜토리얼 > 느린 쿼리 속도를 높이기 위해 MySQL 조인을 최적화하고 디스크 I/O를 줄이는 방법은 무엇입니까?

느린 쿼리 속도를 높이기 위해 MySQL 조인을 최적화하고 디스크 I/O를 줄이는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-28 18:37:11
원래의
895명이 탐색했습니다.

How Can We Optimize MySQL Joins and Reduce Disk I/O to Speed Up Slow Queries?

조인 최적화 및 디스크 쓰기 감소로 MySQL 느린 쿼리 완화

여러 조인 및 테이블 조회를 활용하는 MySQL 쿼리가 시간을 과도하게 소모하고 특히 웹에 영향을 미치는 상황 페이지 로드 속도에 대한 조사 및 해결이 이루어졌습니다.

문제의 쿼리에는 세 개의 테이블(poster_data, Poster_categories 및 Poster_prodcat. 쿼리는 특정 apcatnum 값이 '623'과 같다는 조건을 기반으로 이러한 테이블의 특정 정보를 표시하려고 했습니다.

데이터베이스 스키마 및 쿼리 계획(EXPLAIN 문으로 제공됨)을 분석한 결과 1,700만 개 이상의 행이 포함된 Poster_prodcat 테이블이 속도 저하의 주요 원인이었습니다. 특히 최적화되지 않은 조인 조건으로 인해 이 테이블에서 약 400,000개 행의 하위 집합에 액세스할 때 쿼리가 디스크에 기록되었습니다.

이 문제를 해결하기 위해 데이터베이스 구조와 인덱스의 재구성이 제안되었습니다. 원래의 복잡한 조인 구조는 단순화되고 보다 효율적인 조인 전략으로 대체되었습니다. 또한 쿼리 성능을 향상시키기 위해 관련 열에 클러스터형 복합 인덱스가 도입되었습니다.

다음 코드 조각은 최적화된 데이터베이스 구조와 쿼리를 보여줍니다.

-- Create the tables
DROP TABLE IF EXISTS poster;
CREATE TABLE poster (
  poster_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  name VARCHAR(255) NOT NULL UNIQUE
)
ENGINE = INNODB;


DROP TABLE IF EXISTS category;
CREATE TABLE category (
  cat_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
  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) -- Clustered composite index
)
ENGINE = INNODB;


-- Populate the tables with data

-- Fetch data from the existing database to populate the new structure

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 조인을 최적화하고 디스크 I/O를 줄이는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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