mysql에서 인덱스로 작업범위를 줄일수있는 조건
btree인덱스를 작업범위결정조건으로 사용할수없는조건은
not equal로 비교(not in,is not null,<>)
like '%abc'
스토어드함수나 연산자로 인덱스칼럼이 변형된 후 비교(substring,dayofmonth)
not-deterministic속성의 스토어드함수가 비교조건에 사용
데이터타입이 서로 다른 비교(char_column=10)
문자열데이터타입의 인코딩값이 다른경우(utf8과 euckr의 비교)
가 있음
추가적으로 null도 mysql에서는 인덱스에 저장돼서,작업범위조건으로 사용할수있음
다중칼럼인덱스에서 작업범위결정조건으로 사용할수없는경우(col1,col2,col3..colN순 인덱스)
col1에 대한 조건이 없을때
col1칼럼의 비교조건이 위의 인덱스사용불가조건중 하나일경우
col1을 만족하면 일단 레인지스캔확정이고,그뒤로 인덱스끝까지 루프돌면서 효율이 올라감
다중칼럼인덱스에서 작업범위결정조건으로 인덱스를 사용하는경우
col1~colN까지 =나 in으로 비교하는경우
colN에 대해 다음 연산자중 하나로 비교
동등비교(=나 in)
비교연산자(<,>)
like 좌측일치(like 'abd%')
즉 일단 맨앞에거만 where에 들어있어도 레인지긴 한데,맨앞에 없으면 아예 풀스캔이고,순서대로 다 있으면 베스트
즉 해당조건을 만족시키지 못한 다음 컬럼부터는 체크조건으로 들어가게됨(없거나 작업범위조건을 만족시키지못하거나)