8.2.1.1 SELECT 문 속도
쿼리 최적화의 주요 고려 사항은 다음과 같습니다.
느린
SELECT ... WHERE
쿼리를 빠르게하기 위해 먼저 확인하는 것은 인덱스 를 추가 할 수 있는지 여부입니다.WHERE
절에서 사용하는 컬럼에 인덱스를 설정하고 평가, 필터링 및 최종 결과의 검색 속도를 높일 수 있습니다. 불필요한 디스크 공간을 피하기 위해 응용 프로그램에서 사용되는 많은 관련 쿼리 속도를 약간 인덱스 세트를 구축합니다.인덱스는 결합 과 외래 키 등의 기능을 사용하여 여러 테이블을 참조하는 쿼리에 특히 중요합니다.
EXPLAIN
문을 사용하여SELECT
에 사용하는 인덱스를 확인할 수 있습니다. 섹션 8.3.1 "MySQL의 인덱스의 사용 방식" 및 섹션 8.8.1 "EXPLAIN으로 쿼리 최적화" 를 참조하십시오.과도한 시간이 걸리는 함수 호출 등의 쿼리 부분을 파악하고 조정합니다. 쿼리의 구축 방법에 따라 함수가 결과 세트의 모든 행에 1 회씩, 심지어 테이블의 모든 행에 대해 한 번씩 호출되는 등 크게 비 효율성을 확대시켜 있는 것이 있습니다.
특히 큰 테이블의 경우 쿼리에서 전체 테이블 스캔 횟수를 최소화합니다.
ANALYZE TABLE
문을 정기적으로 사용하여 테이블 통계를 최신 상태로 유지하고 최적화 프로그램이 효율적인 실행 계획을 세우는 데 필요한 정보를 얻을 수 있도록합니다.튜닝 기법, 인덱싱 기법 및 각 테이블의 스토리지 엔진에 특정 구성 매개 변수에 대해 학습합니다.
InnoDB
와MyISAM
의 어디라도 쿼리의 성능을 가능하게하고 유지하기위한 일련의 지침이 있습니다. 자세한 내용은 섹션 8.5.5 "InnoDB 쿼리 최적화" 및 섹션 8.6.1 "MyISAM 쿼리 최적화" 를 참조하십시오.특히, MySQL 5.6.4 이상에서는 섹션 14.13.14 "InnoDB의 읽기 전용 트랜잭션 최적화" 기법을 사용하여
InnoDB
테이블의 단일 쿼리 트랜잭션을 최적화 할 수 있습니다.특히 최적화 프로그램 같은 변환의 일부를 자동으로 실행하면 이해가 어려울 같은 쿼리 변환을 피합니다.
하나의 기본 지침을 제공하여 성능 문제가 쉽게 해결되지 않을 경우
EXPLAIN
계획을 읽고 인덱스,WHERE
절 조인 절 등을 조정하여 특정 쿼리의 내부 정보를 조사합니다. (어느 정도의 전문 기술에 이르고있는 경우는EXPLAIN
계획을 읽을 수 모든 쿼리의 첫 번째 단계가 될 것으로 생각됩니다.)MySQL이 캐시에 사용되는 메모리 영역의 크기와 특성을 조정합니다.
InnoDB
버퍼 풀 ,MyISAM
키 캐시 및 MySQL 쿼리 캐시의 효율적인 사용하여 2 번째 이후 메모리에서 결과가 얻어지기 때문에 반복 쿼리의 실행 속도가 향상합니다.캐시 메모리 영역을 사용하여 빠른 실행 쿼리에서 필요한 캐시 메모리를 줄이고, 응용 프로그램이 더 확장되도록 더욱 최적화 할 수 있습니다. 확장 성은 성능을 크게 저하시키지 않고 응용 프로그램에 더 많은 동시 사용자 큰 요청 등을 처리 할 수있는 것을 의미합니다.
쿼리의 속도가 테이블에 동시에 액세스하는 다른 세션에 의해 영향을받을 수있는 잠금 문제를 처리합니다.