querybtree

database index가 쿼리를 빠르게 만드는 이유를 설명해 주세요

면접 출제
예상 시간
7
30초 답변

꼬리질문

조금 더 깊게 물어본다면

답변 뒤에 이어질 수 있는 질문들을 하나씩 열어볼 수 있어요.

index 내부는 어떤 자료구조인가요?

부가 설명

SELECT * FROM users WHERE email = 'a@example.com';

email에 index가 없다면 database는 많은 row를 확인해야 할 수 있습니다. email index가 있으면 해당 값을 빠르게 찾아 row에 접근할 수 있습니다.

CREATE INDEX users_email_idx ON users (email);

다만 모든 column에 index를 만들면 쓰기 성능과 저장 공간에서 손해를 볼 수 있습니다.

index가 항상 사용되는 것도 아닙니다. 조건이 너무 넓어서 table 대부분을 읽어야 하거나, 함수로 column을 감싸 index를 타기 어렵게 만들거나, 통계 정보상 sequential scan이 더 낫다고 판단되면 index를 쓰지 않을 수 있습니다.

Index는 읽기를 빠르게 하지만 쓰기와 저장 공간 비용을 늘리는 trade-off가 있습니다.

한 줄 정리

index는 table scan 범위를 줄여 읽기를 빠르게 만들지만, 저장 공간과 쓰기 갱신 비용을 함께 만드는 자료구조입니다.