
SELECT * (모든 컬럼)을 가져오고, 2번은 인덱스에 있는 name 컬럼만 가져옵니다.name)에 없는 id, email, signup_date를 찾으러 실제 데이터 테이블(Heap)로 가야만 했습니다. 반면, 2번은 Planner(플래너)가 "인덱스만 봐도 답이 다 있네?"라고 판단해 테이블 근처에도 가지 않았습니다.WHERE 절에 인덱스에 없는 signup_date 조건을 추가하고, SELECT 결과에도 포함했습니다.signup_date를 확인하고 출력해야 하므로, Executor(실행기)가 실제 데이터 파일 영역을 뒤져야 하는 비싼 비용(Cost)을 지불하게 된 것입니다[cite: 324, 331].name만 있는 인덱스고, 4번은 (name, signup_date)가 묶인 복합 인덱스입니다.signup_date 정보까지 인덱스 안에서 모두 찾을 수 있게 되어 다시 가장 빠른 경로를 선택했습니다[cite: 322, 324].차이점 (Condition): * 1번: SELECT로 테이블의 모든 컬럼(id, name, email, signup_date)을 요구하지만, 인덱스는 name 하나만 가지고 있습니다.
SELECT id, name, email을 요구하며, 인덱스 생성 시 INCLUDE (id, email)를 사용하여 결과에 필요한 데이터를 인덱스 안에 미리 복사해 두었습니다.Plan 변화 (Query Plan): Bitmap Heap Scan → Index Only Scan
결과 해석 (Interpretation): * 1번은 인덱스에 없는 나머지 정보를 찾기 위해 Planner(플래너)가 실제 Data Files(Heap) 영역을 뒤져야 한다고 판단했습니다. 이 과정에서 디스크 읽기(read)가 발생하며 비용이 급증합니다.
base/ 디렉토리) 근처에도 가지 않고 인덱스만으로 모든 응답을 끝냈습니다.INCLUDE로 인덱스에 태워두면, '테이블 방문' 없는 초고속 조회가 가능합니다.