select에서 해당 컬럼을 쿼리하는데..select조건(where)문에없는데 index를 조건이 변경되어 쿼리를 타는 원인이 무엇인가 알고싶습니다.
예를들어.
db_name : test
컬럼은 ->date, id, name, jumin, jumin1, addr, hp, mp, email, etc 이렇게있습니다.
1번 index는 date
2번 index는 date, id
3번 index는 date, email
이렇게 세개의 인덱스가 만들어져있습니다.
select * from where date = '20050505' and (id = 'test' or email = 'test@test.com');
이렇게 검색을하면 이상하게 index date를 통하여 처리됩니다.
그래서 검색이 너무 느린 현상이 발생됩니다. or문때문에 해당 index를 못처리하는군요.
그래서 특정 컬럼을 추가했습니다. date, id, name, jumin, jumin1, addr, hp, mp, email, etc, domain, mailfrom =>이것을
이렇게 추가하고 index를 하나 두개 추가했습니다.
4번 index는 date, domain
5번 index는 date, mailfrom
이렇게하고 상위의 쿼리를 실행하니까. 쿼리 5번이 실행되더군요. 쿼리문에는 해당 컬럼조건이 없는데 말이죠.
그러면서 쿼리처리속도가 한 10배정도 빨라졌습니다.
어떻게 이런 현상이 생기는지 궁금합니다.
|