만약 table에 인덱스를 걸지 않으면 어떻게 될까?
원하는 데이터를 찾고 싶을 때 table 전체를 full scan 해야 한다
full scan 이란?
row를 하나하나씩 모두 확인하는 것을 의미하며, table scan 이라고도 부른다
full scan은 당연히 시간이 오래 걸리기 때문에 서비스에 좋지 않은 영향을 끼친다
아래와 같이 ARTICLE 테이블이 있다고 가정해보자
article_id | writer_id | title | created_at | read_cnt | comment_cnt |
1 | aaa | ... | ... | ... | ... |
2 | bbb | ... | ... | ... | ... |
... | ... | ... | ... | ... | ... |
만약 codingyo가 작성한 글을 찾고 싶다면 쿼리문은 아래와 같다
SELECT * FROM article WHERE writer_id = 'codingyo';
이때 writer_id 컬럼에 인덱스가 걸려있지 않다면 ARTICLE 테이블을 처음부터 끝까지 확인하면서 writer_id가 dingyo인 row를 찾아야 한다
이렇게 동작하면 성능이 매우 비효율적이며, 테이블에 데이터가 많아질수록 더 많은 탐색 시간이 걸릴 것이다
결국 서비스의 퍼포먼스에 악영향을 주게 된다
DB table에 인덱스가 걸려있다면?
원하는 데이터를 매우 빠르게 찾을 수 있다
가령, writer_id에 인덱스가 걸려있다면, full scan을 할 필요가 없으며 index scan을 통해 매우 빠르게 codingyo가 작성한 글들을 찾을 수 있다
그렇다면 개발자는 무엇을 해야 하는가?
* 인덱스의 종류와 동작 방식을 이해하고 있어야 한다
* 실제로 조회되는 필드에 적절한 인덱스를 걸어줘야 한다
쉬운코드는 본질에 충실합니다