>데이터 베이스 >MySQL 튜토리얼 >데이터베이스 재구성으로 느린 MySQL 쿼리를 어떻게 최적화하고 디스크 I/O를 제거할 수 있습니까?

데이터베이스 재구성으로 느린 MySQL 쿼리를 어떻게 최적화하고 디스크 I/O를 제거할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-30 14:44:171004검색

How Can Database Restructuring Optimize a Slow MySQL Query and Eliminate Disk I/O?

실행 시간 단축 및 디스크 I/O 제거를 위한 MySQL 쿼리 최적화

일반적인 웹 애플리케이션 시나리오에서 데이터베이스 쿼리 성능은 반응형 사용자 경험을 유지하는 것이 중요합니다. 이 문서에서는 실행 시간이 느려 웹 사이트 성능이 저하되는 특정 MySQL 쿼리를 다룹니다.

문제의 쿼리는 "poster_data", "poster_categories" 및 "poster_prodcat"라는 세 개의 테이블을 조인합니다. "poster_prodcat" 테이블의 특정 조건을 기반으로 테이블에서 데이터를 검색하는 것을 목표로 합니다. 쿼리 실행 계획에서 "poster_prodcat" 테이블과 해당 테이블의 디스크 쓰기가 관련되어 있어 데이터 검색이 비효율적임을 나타냅니다.

성능 문제를 해결하기 위해 데이터베이스와 쿼리를 재구성하는 대체 접근 방식을 모색했습니다. 특히 "poster", "category" 및 "poster_category"라는 이름의 새 테이블을 만들었습니다. "poster_category" 테이블은 (cat_id, Poster_id) 열에 클러스터형 복합 인덱스를 사용하여 설계되었습니다.

이 새로운 스키마를 사용하여 원래 쿼리를 다음과 같이 다시 작성했습니다.

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;

재작성된 쿼리에 대한 EXPLAIN 계획을 보면 성능이 크게 향상되었습니다. 이제 쿼리는 인덱스를 효과적으로 사용하여 디스크 I/O 필요성을 줄이고 실행 시간을 최소화합니다.

위 내용은 데이터베이스 재구성으로 느린 MySQL 쿼리를 어떻게 최적화하고 디스크 I/O를 제거할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.