Loading...
MySQL 9.5 Reference Manual 9.5의 10.5.6 Optimizing InnoDB Queries의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
InnoDB 테이블에 대한 쿼리를 튜닝하려면, 각 테이블에 대해 적절한 인덱스 집합을 생성해야 합니다. 자세한 내용은 Section 10.3.1, “How MySQL Uses Indexes”를 참조하십시오. InnoDB 인덱스에 대해서는 다음 지침을 따르십시오:
각 InnoDB 테이블에는 (요청 여부와 관계없이) primary key가 있으므로, 각 테이블에 대해 가장 중요하고 시간에 민감한 쿼리에서 사용되는 컬럼들로 primary key 컬럼 집합을 지정하십시오.
primary key에 너무 많거나 너무 긴 컬럼을 지정하지 마십시오. 이 컬럼 값들은 각 secondary index에 중복 저장됩니다. 인덱스에 불필요한 데이터가 포함되면, 이 데이터를 읽기 위한 I/O와 이를 캐시하기 위한 메모리 사용량이 늘어나 서버의 성능과 확장성이 저하됩니다.
각 컬럼에 대해 개별적인 secondary index를 생성하지 마십시오. 각 쿼리는 하나의 인덱스만 사용할 수 있기 때문입니다. 거의 조건으로 사용되지 않는 컬럼이나 서로 다른 값의 개수가 적은 컬럼에 대한 인덱스는 어떤 쿼리에도 도움이 되지 않을 수 있습니다. 동일한 테이블에 대해 많은 쿼리가 있고, 이들이 서로 다른 컬럼 조합을 검사한다면, 많은 단일 컬럼 인덱스를 생성하는 대신 소수의 concatenated indexes를 생성하도록 하십시오. 인덱스에 결과 집합에 필요한 모든 컬럼이 포함되어 있다면 (이를 covering index라고 함), 쿼리가 테이블 데이터를 전혀 읽지 않고도 처리될 수 있습니다.
인덱스가 지정된 컬럼에 NULL 값을 허용하지 않으려면, 테이블을 생성할 때 해당 컬럼을 NOT NULL로 선언하십시오. 옵티마이저는 각 컬럼에 NULL 값이 포함될 수 있는지 여부를 알 때, 쿼리에 가장 효과적인 인덱스를 더 잘 결정할 수 있습니다.
Section 10.5.3, “Optimizing InnoDB Read-Only Transactions”에 있는 기법을 사용하여, InnoDB 테이블에 대한 단일 쿼리 트랜잭션을 최적화할 수 있습니다.
10.5.5 Bulk Data Loading for InnoDB Tables
10.5.7 Optimizing InnoDB DDL Operations