느린 쿼리 기본: 데이터 엑세스 최적화

쿼리가 잘 수행되지 않는 가장 기본적인 이유는 너무 많은 데이터를 사용하기 때문입니다.

성능이 떨어지는 쿼리를 두 단계로 분석하는 것이 유용합니다.

  1. 애플리케이션이 필요 이상으로 많은 데이터를 검색하는지 확인합니다. 일반적으로 너무 많은 행에 액세스하고 있음을 의미하지만 너무 많은 열에 액세스할 수도 있습니다.
  2. MySQL 서버가 필요 이상으로 많은 행을 분석하고 있는지 확인합니다.

1. 데이터베이스에 불필요한 데이터를 요청

1.1 필요 이상의 행을 가져오기

일반적인 실수 중 하나는 MySQL이 전체 결과 셋을 계산하고 반환하는 대신 요청에 따른 결과를 제공한다고 가정하는 것입니다.

예를 들어 페이지 기능을 구현했을 때 실제로 해당 페이지의 데이터 뿐 아니라 전체 데이터를 조회 한 다음 조건에 맞는 데이터를 셋한 다음 보여줍니다. 최상의 해결책은 쿼리에 LIMIT 절을 추가하는 것입니다.

1.2 다중 테이블 조인에서 모든 열 가져오기

# 세 테이블 모두에서 모든 열이 반환 되기 때문에 이렇게 작성 X
SELECT * FROM sakila.actor
INNER JOIN sakila.film_actor USING(actor_id)
INNER JOIN sakila.film USING(film_id)
WHERE sakila.film.title = 'Academy Dinosaur';
# 대신에 이렇게 작성
SELECT sakila.actor.* FROM sakila.actor...

1.3 모든 열 가져오기

모든 열을 검색하면 인덱스 적용과 같은 최적화를 방해할 수 있을 뿐만 아니라 서버에 대한 I/O, 메모리 및 CPU 오버헤드가 가중될 수 있습니다. SELECT * 를 보편적으로 권장하지 않습니다.

1.4 동일한 데이터를 반복적으로 가져오기

주의하지 않으면 데이터베이스 서버에서 동일한 데이터를 반복적으로 검색하고 동일한 쿼리를 실행하여 가져오는 애플리케이션 코드를 작성하기 쉽습니다. 반복 검색하거나 조회하는 기능은 캐시를 이용하여 데이터베이스에 부하가 안되도록 구현하는게 좋습니다.

2. MySQL이 너무 많은 데이터를 검사 함

MySQL에서 가장 간단한 쿼리 비용 매트릭은 다음과 같습니다.