select 절에 * 한 것과 컬럼 지정한 것의 차이 이야기하시는 것 맞죠?
*를 지정했을 때 full이고 컬럼을 지정하면 인덱스 타는 건 가능성이 조금 있는데 그 반대는 이상한데요?
예를 들어
col1 ~ col30 으로 구성된 tableA에서
col1, col2, col3으로 구성된 인덱스가 있을 때
select col1, col2
from tableA
where col3 between '1900-01-01' and '2999-12-31'--테이블의 모든 범위
이렇게 쿼리를 만들면 인덱스 정보만 이용해도 모든 정보를 가지고 올 수 있지만
select *
from tableA
where col3 between '1900-01-01' and '2999-12-31'
이렇게 쿼리를 만들면 인덱스 정보를 읽고 테이블로 가봐야지 col4에서 col30까지의
정보를 가지고 올 수 있습니다.
인덱스 한 건 읽고 -> 테이블 데이터 블록 하나 읽고
인덱스 한 건 일고 -> 테이블 데이터 블록 하나 읽고
이것이 과정이 반복이 된다면 아주 비효율적이죠.
오히려 인덱스를 읽지 않고 테이블 정보만 읽는 게 더 낫겠죠?
해서 *를 쓰면 full scan할 가능성이 있고 컬럼을 지정하면 인덱스만 활용할 가능성이 있습니다.
이것을 말씀하시는 게 맞는지 모르겠네요.