문의하기
개발 이야기

PHP에서 MySQL 최적화 - 실무에서 겪은 쿼리 개선 사례

2016년 10월 22일 · 약 1분 소요 · 682회 조회 · 관리자

성능 최적화의 첫 번째 단계

웹사이트가 커지면서 데이터베이스 성능이 문제가 되기 시작했습니다. 쿼리가 느려지면서 페이지 로딩이 지연되는 경험을 여러 번 했습니다.

N+1 쿼리 문제 해결

가장 흔한 실수는 루프 안에서 계속 데이터베이스를 조회하는 것입니다.

// 나쁜 예 - N+1 쿼리
$posts = $mysqli->query("SELECT * FROM as_blog");
while ($row = $posts->fetch_assoc()) {
    $author = $mysqli->query("SELECT * FROM as_staff WHERE idx = " . $row['staff_idx']);
    // 각 포스트마다 추가 쿼리 실행
}

// 좋은 예 - JOIN 사용
$result = $mysqli->query("
    SELECT b.*, s.username
    FROM as_blog b
    LEFT JOIN as_staff s ON b.staff_idx = s.idx
");
while ($row = $result->fetch_assoc()) {
    // 한 번의 쿼리로 모든 데이터 조회
}

인덱스의 중요성

published_at, category_idx, is_active 같은 자주 조회되는 칼럼에 인덱스를 추가하면 조회 속도가 크게 개선됩니다.

쿼리 캐싱

자주 변경되지 않는 데이터(카테고리, 태그 등)는 메모리에 캐시하여 데이터베이스 접근을 줄일 수 있습니다.

목록으로
무료 상담