우선, 인덱스 힌트 사용법이 틀렸습니다만... 이건 문제될건 없구요..
컴마로 구분하는게 아니라 공백으로 구분하는 거에요.. 컴머도 되긴 될겁니다..
인덱스 특징중 하나가 널값이 제외되어 생성된다는 것인데요.
이는 다시 말하면 전체 레코드 수와 인덱스 레코드 수가 다를 수 있다는 거지요.
아무 조건 없이 전체테이블 스캔하는데 인덱스를 경유할 경우 전체 레코드가 나오지 않을 수 있다면?
당연히 인덱스를 사용하지 못하겠지요.
기본키의 경우엔 Not Null 속성을 가지고 있기 때문에 (인덱스 레코드수 = 테이블 레코드수) 공식이 성립됩니다.
따라서 기본키 인덱스를 사용한 거구요.
Not Null 속성이 없는 컬럼에 대한 인덱스는 설령 이 컬럼에 널이 없다손 치더라도...
옵티마이저는 전체 데이터를 까보기 전에는 이를 알 수 없습니다.
해결법은 해당 컬럼에 Not Null 속성을 지정하거나,
조건절에서 IS NOT NULL 조건을 추가하시면 됩니다.