회사 테이블 중에 row 갯수가 800만개가 넘는 테이블이 있다. 해당 테이블을 검색하는 API가 있는데, 괴랄한 시간이 걸리는 것으로 확인됐다. 역시나 병목은 DB…..
(위 쿼리를 사용하는 API가 걸리는 시간, 병목이 DB로 확인됐다.)
무려 13초……
이 DB는 성능이 낮은 staging DB이지만 아무리 그래도 그렇지, 너무한 시간이었다. production DB는 1초정도 시간이 걸렸다.
이를 해결하기 위해 검색되는 컬럼에 index를 걸어 검색되는 시간을 단축하고자 했다. 아래는 index를 걸었을때 걸리는 시간이다.
50ms도 안걸리게 되었다…. 대략 300배 정도의 쿼리 성능 향상을 보인것이다.
Index가 중요하다 것은 알고 있었지만 이 정도까지 영향을 미치는 요소인지는 몰랐다. (무려 300배..!!) Index를 설정한 컬럼이 한번 값이 정해지면 변경되지 않은 컬럼인 것도 앞으로 Index를 설정함으로써 생기는 오버헤드도 크지 않다는 것도 보장할 수 있어 고민없이 Index를 설정할 수 있었다. (조만간 B+ Tree를 정리하여 DB Index 동작방식을 완전히 이해해보는 시간을 가져보겠다.)
cf) MySQL의 경우에는 foreign key를 걸면 자동으로 index를 걸어주는 한편, PostgreSQL은 해주지 않는다고 한다.