6x Speed Improvement in Join Queries with GIN Indexing

여러 개의 Table에서 %asdf%와 같은 단어가 포함된 Content를 가져와야하는 상황이었고, 수십 만개의 데이터가 있었다.

어느순간 특정 부분에서 Slow query가 발견되었길래 확인을 해보니 매우 복잡한 조건을 걸고 단어를 검색하면 1.8초 가량의 시간이 시간이 걸렸다.

처음에는 성능을 확장해야하나, 쿼리를 더 효율적으로 바꿀 방법이있나? 등등 여러가지 부분들을 고려하였다.

최종적으로 해결한 방법은 https://www.postgresql.org/docs/current/gin.html 를 사용하는것이었다.

위 방법을 통해서 데이터를 가져올때 특정 단어를 역 인덱싱하는 방법으로 6배의 속도 개선을 이뤄냈고 (만족스러운 속도는 아니었지만) 그 당시에는 최대한 빠른 방법내에 서비스를 안정시킬 수 있는 수단이었다.

하지만 데이터 삽입 및 update를 하는 경우에는 일반적인 인덱싱(B-TREE와 같은)보다 성능 저하가 일어날 수 있으므로 뭔가를 검색해오는, Join과 같은 쿼리를 사용해야하는 경우만 쓰는 것이 유용하다.