문제의 발단.
db에 이미지 파일을 blob형식으로 넣게 되었는데, 이로 인해서 sql을 실행할때, 엄청 수행시간이 느려졌다.
추후에 이는 좋지 못한 방법이란 것을 알게되었고, blob 파일을 넣는대신 이미지 경로를 넣어주는 것으로 변경하였다.
SQL Explain
Sql에서 Explain문에 대해 알게 되었는데,
위 구조를 보면,
select_type - select 구문의 실행타입을 뜻하며 내가 실행한 sql문은 단순 sql문이 였기때문에 SIMPLE type이다.
table - 어떤 테이블을 검색하는지 알려준다.
type - 잘 모르겠지만, 나의 경우에 id가 non-unique 인덱스 이므로 ref로 표시된다.
possible_keys - 해당 칼럼은 옵티마이저가 쿼리처리를 위해 최적의 값을 선택해주므로 고려하지 않아도 된다.
key - 옵티마이저가 실제로 사용한 인덱스 키이다. ID 칼럼은 인덱스이므로 idx_id 가 선택되었다.
key_len - ID는 INTEGER이기 때문에 4byte의 길이를 가진다.
ref - ID는 1, 2 ,3 위와 같은 식으로 상수형태로 되어있기 때문에 const로 표현된다.
rows - 쿼리를 수행할때 검색해야할 row의 갯수를 의미한다. row의 수가 적으면 적을수록 퍼포먼스가 향상된다.
해결방법
테이블의 ID 칼럼을 인덱스로 만들어주어서 성능 개선을 하였다.
위는 성능 개선하기 전 실행속도인데 , 무려 32초가 걸렸다.
그 후 위 와 같이 id 를 idx_id index로 만들어주었는데, 엄청나게 속도 향상이 되었다.
SELECT * FROM `RESTAURANT_DETAIL` WHERE id=1;
인덱싱을 하였을때, 하지 않았을때 위 select문을 실행하였는데,
아쉽게도 정확한 실행속도는 캡쳐하지 못하였지만 체감으로 속도차이가 엄청나다고 느꼈다.
위와 같은 경험을 하고나니 이 index가 무엇인가, 왜 이렇게 시간이 줄어들까에대한 궁금증이 생겼다.
너무 좋은 글이 있어서 링크를 남기면서 글을 마무리한다.
https://jojoldu.tistory.com/243
참고자료
SQL EXPLAIN 부분
https://weicomes.tistory.com/151
https://shlee0882.tistory.com/155
'잡동사니' 카테고리의 다른 글
감명받은 블로그 모음 (0) | 2022.04.17 |
---|---|
단축키 (0) | 2022.04.17 |
윈도우 작업스케쥴러 (0) | 2022.03.10 |
정규 표현식 (0) | 2022.03.09 |
MySQL ConnectionRefusedError [SequelizeConnectionRefusedError]: connect ECONNREFUSED 127.0.0.1:3306 에러 (0) | 2022.03.03 |