문제의 발단.
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
[mysql] 인덱스 정리 및 팁
MySQL 인덱스에 관해 정리를 하였습니다. MySQL을 잘 알아서 정리를 한것이 아니라, 잘 알고 싶어서 정리한 것이라 오류가 있을수도 있습니다. 1. 인덱스란? 인덱스 == 정렬 인덱스는 결국 지정한 컬
jojoldu.tistory.com
참고자료
SQL EXPLAIN 부분
https://weicomes.tistory.com/151
Real MySQL [6-4] 실행계획 - possible_keys, key, key_len, ref, rows, extra 칼럼
본 게시물의 내용과 이미지는 도서 Real MySQL의 내용을 재구성하여 작성되었습니다. 저자, 출판사에 의해 저작권 문제 발생시 게시물이 비공개 될 수 있음을 알립니다. 이전 포스팅 ( Real MySQL [3]
weicomes.tistory.com
https://shlee0882.tistory.com/155
SQL EXPLAIN 정리
1. SQL EXPLAIN 정리 1.1 부서 테이블 1 2 3 select * from dbadev.dept ; cs 부서테이블에는 4개의 행 ( 4rows returned ) 1.2 직원 테이블 1 2 3 select * from dbadev.emp ; cs 직원테이블에는..
shlee0882.tistory.com
'잡동사니' 카테고리의 다른 글
감명받은 블로그 모음 (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 |