추측 멈추고 엔진한테 물어봐
아무 query 앞에 EXPLAIN QUERY PLAN만 붙이면 SQLite가 실제로 뭘 할 생각인지 알려줘. 연산 트리를 찍어주는데, 눈여겨볼 단어는 다섯 개야.
- SCAN — 테이블을 전부 훑겠다는 뜻이야. 작은 테이블이면 싸고 큰 테이블이면 비싸.
- SEARCH — 인덱스를 타고 찾아간다는 뜻이야. 이게 나오면 좋은 거고.
- USING INDEX X — 어떤 인덱스를 골랐는지 알려줘.
- USING COVERING INDEX X — query에 필요한 컬럼이 전부 인덱스 안에 있어서 실제 테이블은 건드리지도 않는다는 뜻이야. 최고지.
- USE TEMP B-TREE FOR ORDER BY — 정렬에 쓸 인덱스가 없어서 임시로 하나 만들었다는 뜻이야. 정렬용 인덱스가 빠졌다는 신호야.
Tip: EXPLAIN QUERY PLAN은 몸에 배어 있어야 해. 고치기 전에 한 번 보고, 고친 다음에 다시 봐서 plan이 실제로 바뀌었는지 확인해. plan이 그대로인 'fix'는 아무것도 안 고친 거야.