[ PROJECT ] 당근마켓 클론코딩 - #04 MySQL 테이블에 INDEX 걸기!

Hailee·2021년 1월 1일
1

[ PROJECT ]

목록 보기
14/16
post-thumbnail

우리가 사용하는 지역코드 테이블은 거의 18,000개가 넘는 지역정보 데이터가 있다.

각 테이블의 primary key는 원래 INDEX가 걸려서 pk로 검색할 경우 문제가 되지 않지만,
그 외의 필드로 데이터 검색을 하게 될 경우

이런 아름다운 상황을 겪을 수 있다.

데이터가 너무 많아서, timeout이 되어버린 것!


MySQL workbench로 하고있었다면 timeout 시간 설정을 늘려주면 되었을 수도 있다.

하지만 '그 회사'에서 겪어본 바로는, 데이터가 수십만, 수만건이 있다면 데이터의 방대한 양때문에 어쩔 수 없이 lost connection메세지를 보게 된다.

한창 교통 데이터를 csv파일로 추출해내는 작업을 했었을 때, INDEX가 걸려있지 않은 데이터들을 검색하려니 몇일씩이나 걸려서 데이터 추출을 해야했고,
심한 경우는 이미 데이터베이스 서버와 연결이 끊긴 상태여서 데이터 추출 도중 연결이 끊겨버리기도 했었다.

아무것도 모르던 나에게 사수가 알려준 한줄기 빛, INDEX

Oracle의 경우는 hint를 걸어서 작업해주면 되었고, 찾아보니 MySQL도 hint라고 부르는 것 같다.
👉🏻 MySQL hint로 데이터 검색하기
👉🏻 MySQL에 FULL TEXT INDEX 생성하기

👉🏻 sork '그 회사'에서 oracle hint 사용했던 경험

무튼, 그래서 어떻게 INDEX를 생성하는데?


👉🏻 CREATE INDEX

공식문서 아닌 공식문서 같은 글.

CREATE INDEX [index name] ON [table name]([column name]);

CREATE INDEX idx_addresses ON addresses(id, code, addresses3);

이런 식으로 작성하면 된다.
내가 지정하고 싶은 index명으로, 내가 hint를 걸어 사용하고자 하는 필드명들을 명시해주면 된다.

이제 난 거의 2만개 되는 데이터들 속에서도 timeout 없이 0.01초만에 검색을 할 수 이찌.

🤩

profile
웹 개발 🐷😎👊🏻🔥

0개의 댓글