전체 실행 계획 (위 → 아래 읽기)

-> Filter: (orders_big.customer_id = 77777)
   (cost=50346 rows=49825)
   (actual time=19..122 rows=5 loops=1)

     -> Table scan on orders_big
        (cost=50346 rows=498248)
        (actual time=0.135..108 rows=500000 loops=1)


1️⃣ 가장 아래부터 읽는다 (항상 이 순서)

🔻 Table scan on orders_big

Table scan on orders_big
(cost=50346 rows=498248)
(actual time=0.135..108 rows=500000 loops=1)

🔍 이 한 줄의 의미

항목 의미
Table scan 인덱스 안 쓰고 테이블 전부 읽음
rows=498248 옵티마이저 예상: 약 49만 건
actual rows=500000 실제로 50만 건 전부 읽음
actual time=0.135..108 0.135ms에 시작해서 108ms 동안 스캔

👉 완전한 풀 테이블 스캔


❗ 왜 인덱스를 안 썼나?

그래서 옵티마이저가 이렇게 생각함:

“어차피 거의 다 읽을 거면

인덱스 타고 왔다 갔다 하지 말고

그냥 한 번에 다 읽자”


2️⃣ 그 위에 Filter 단계

-> Filter: (orders_big.customer_id = 77777)
(cost=50346 rows=49825)
(actual time=19..122 rows=5 loops=1)

🔍 의미

항목 의미
Filter 읽은 행 중 조건으로 거름
rows=49825 옵티마이저 예상: 49,825건
actual rows=5 실제 결과: 5건
actual time=19..122 필터링 시작~종료 시간