실행계획(EXPLAIN)의 Extra 칼럼에 "Using Index Condition"이라고 표시되는 경우가 있다.
이는 WHERE 절의 인덱스를 이용한 조건(인덱스를 사용한 조건이어야 함)에 체크 조건이 있을 경우 체크 조건 처리를 스토리지 엔진이 하도록 전달하는 것이다.

 Mysql은 Mysql 엔진과 스토리지 엔진으로 구성되어 있는데, 범위를 제한하는 조건은 스토리지 엔진에서 인덱스로 데이터를 찾으면서 사용한다. 그런 다음 찾은 데이터를 Mysql 엔진에게 넘긴다.
 Mysql 엔진은 범위를 제한하지 못하는 체크 조건을 처리하게 된다. 이 체크 조건에 부합하지 않은 레코드는 버리게 된다.
 Mysql 엔진과 스토리지 엔진은 tcp 통신을 하기 때문에 체크 조건에 맞지 레코드를 전달하는 것은 낭비다.

 이렇게 스토리지 엔진이 체크 조건까지 처리하도록 최적화가 되었고, "Condition push down"이라고 불린다. 이게 InnoDB에 5.1버전부터 들어갔는데, extra 칼럼에 Using Index Condition이라고 표시된 건 5.6버전(https://dev.mysql.com/doc/refman/5.6/en/index-condition-pushdown-optimization.html)부터이다.

SMALL

+ Recent posts