Index를 타지 않는 쿼리

인덱스 컬럼을 변형하는 경우

SELECT * FROM `table` WHERE DATE_FORMAT(`date`, '%Y%m%d') = '20171122';

컬럼을 바꾸기보다는 값을 바꿔주자.

SELECT * FROM `table` WHERE `date` = STR_TO_DATE('20171122', '%Y%m%d');

내부적으로 데이터 타입 전환이 이뤄지는 경우

SELECT * FROM `table` WHERE `date` = '20171122';

데이터 타입 전환이 이루어지면 위처럼 컬럼이 변형되는 것과 비슷한 매커니즘으로 동작한다.

SELECT * FROM `table` WHERE `date` = STR_TO_DATE('20171122', '%Y%m%d');

NOT 이나 IN 연산을 사용할 경우

SELECT * FROM `table` WHERE `name` != 'yunseop';
SELECT * FROM `table` WHERE `name` in ('yunseop', 'song', 'yun', 'seop');

LIKE 연산을 사용할 경우

SELECT * FROM `table` WHERE `name` like '%yun%';

OR 조건을 사용할 경우

SELECT * FROM `table` WHERE `name` = 'yunseop' or `name` = 'song';