MySQL ANALYZE TABLE 전후 실행계획: 27행으로 예상한 조회가 6만 행을 읽는 이유
데이터를 대량으로 변경한 뒤 기존 조회가 느려졌다면, 인덱스가 있는지만 확인해서는 원인을 찾기 어렵습니다. 같은 인덱스를 사용하더라도 옵티마이저가 예상한 처리량과 실제 처리량이 크…

데이터를 대량으로 변경한 뒤 기존 조회가 느려졌다면, 인덱스가 있는지만 확인해서는 원인을 찾기 어렵습니다. 같은 인덱스를 사용하더라도 옵티마이저가 예상한 처리량과 실제 처리량이 크…

특정 날짜의 주문 건수를 세는 SQL에는 WHERE DATE(created_at) = '2026-02-15' 같은 조건이 자주 쓰입니다. 날짜 컬럼에는 인덱스가 있고 실행계획에도 …

쿼리 지연을 조사할 때는 한 번 실행하는 데 가장 오래 걸린 SQL부터 찾기 쉽습니다. 하지만 서버 전체에서 시간을 가장 많이 쓰는 SQL은 한 번에 느린 SQL이 아니라 자주 호…
게시판이나 주문 내역처럼 목록을 페이지 단위로 보여주는 화면에서, 1페이지는 바로 열리는데 수만 번째 페이지로 갈수록 응답이 늦어지는 경우가 있습니다. 화면에 표시되는 건수는 똑같…

EXPLAIN ANALYZE 결과에서 옵티마이저는 약 1만 행을 예상했는데 실제로는 1,000행만 반환되는 경우가 있습니다. 이 차이를 보면 통계가 오래되었거나 인덱스가 잘못되었다…

데이터가 3행뿐인 테이블에 컬럼 하나를 추가하는데 ALTER TABLE이 끝나지 않는다면, 데이터 처리량은 원인이 아닐 가능성이 큽니다. 3행을 처리하는 데 몇십 초가 걸릴 이유가…

기본 키로 한 행만 수정하는 UPDATE가 끝나지 않으면 대부분 실행계획이나 인덱스부터 확인합니다. 그런데 WHERE id = 1처럼 기본 키 동등 조건으로 한 행을 고치는 문장은…

MySQL 서버의 디스크 사용량이 늘어날 때 테이블 크기만 확인하면 원인을 놓칠 수 있습니다. 데이터 변경을 기록하는 Binary Log(binlog)는 테이블과 별개로 공간을 차…
대량 UPDATE가 느리고 디스크 쓰기가 많을 때, 가장 먼저 떠오르는 대책 중 하나가 Redo Log 용량을 늘리는 것입니다. Redo 공간에 여유가 생기면 Checkpoint에…