Loading...
MySQL 9.5 Reference Manual 9.5의 B.3.5 Optimizer-Related Issues의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
MySQL은 쿼리를 처리하는 최선의 방법을 결정하기 위해 비용 기반 옵티마이저를 사용합니다. 많은 경우 MySQL은 가능한 최상의 쿼리 플랜을 계산할 수 있지만, 때로는 MySQL이 현재 데이터에 대해 충분한 정보를 가지지 못하여 데이터에 대해 “educated” 추측을 해야 하는 경우도 있습니다.
MySQL이 “올바른” 일을 하지 못하는 경우, MySQL을 도와줄 수 있는 도구는 다음과 같습니다:
1mysql> EXPLAIN SELECT * FROM t1, t2 WHERE t1.i = t2.i;
EXPLAIN에 대해서는
Section 15.8.2, “EXPLAIN Statement”에서 더 자세히 설명합니다.
ANALYZE TABLE tbl_name을 사용하여 스캔된 테이블의 키 분포를 갱신합니다.
Section 15.7.3.1, “ANALYZE TABLE Statement”를 참조하십시오.
스캔된 테이블에 대해 FORCE INDEX를 사용하여 주어진 인덱스를 사용하는 것에 비해 테이블 스캔의 비용이 매우 크다는 것을 MySQL에 알려줄 수 있습니다:
1SELECT * FROM t1, t2 FORCE INDEX (index_for_column) 2WHERE t1.col_name=t2.col_name;
USE INDEX와 IGNORE INDEX도 유용할 수 있습니다.
Section 10.9.4, “Index Hints”를 참조하십시오.
Global 및 테이블 레벨 STRAIGHT_JOIN.
Section 15.2.13, “SELECT Statement”를 참조하십시오.
글로벌 또는 스레드별 시스템 변수를 조정할 수 있습니다. 예를 들어, mysqld를 --max-seeks-for-key=1000 옵션과 함께 시작하거나 SET max_seeks_for_key=1000을 사용하여 어떤 키 스캔도 1,000번을 초과하는 키 탐색을 발생시키지 않는다고 옵티마이저에 알릴 수 있습니다.
Section 7.1.8, “Server System Variables”를 참조하십시오.
B.3.4 Query-Related Issues
B.3.6 Table Definition-Related Issues