제 슬로우쿼리인데 인덱스 팁 좀 부탁드립니다.
본문
안녕하세요? ^^
mysql 초짜 입니다.
슬로우쿼리를 서버에 기록중에 있습니다. 자료 찾아보면서 결합 인덱스 라는것을 알게 되었습니다.
현재 슬로우 로그에서 제일 흔하게 자주 나타나는 부분이 몇개 있습니다.
<첫번째>
select count(*) as cnt from g5_write_free where wr_parent = '88698' and wr_is_comment = 1;
<두번째>
select * from g5_write_torrent_free where wr_parent = '88698' and wr_is_comment = 1 and wr_good >= '10' and as_shingo >= '0' and wr_option not like '%secret%' order by wr_good desc, wr_id desc limit 0, 3;
<세번째>
update g5_board_new set as_hit = as_hit + 1 where bo_table = 'kids' and wr_id = '14307';
-------------------------------------------------------
위 슬로우로그를 토대로
wr_parent 와 wr_is_comment 칼럼을 결합 인덱스 했습니다.
그런데 두번째 보면 기존 위 2개 컬럼에 추가로 wr_good , as_shingo 컬럼이 붙어 있습니다.
그래서 처음부터 저 4개를 다 결합해야 하는건지 아니면 wr_parent 와 wr_is_comment 이렇게 2개 결합
인덱스하고 wr_good , as_shingo 2개는 따로 각각 개별 인덱스 해야 하는지 궁금합니다.
그리고 3번째는 update 문인데, 어떻게 인덱스를 줘야 하는지 궁금합니다.
아시는 분 답변 꼭! 부탁드려봅니다.
답변 2
1. 잘 해결하신 것 같아요.
2. explain select ~~~ 이런 식으로 앞에 explain을 붙여서 결과값을 보고 인덱싱을 튜닝해보세요. 제 생각엔 텍스트 서치를 해야하는 not like에서 오래 걸리는게 아닐까 생각합니다. is_secret 같은 컬럼을 bool로 만드는게 성능면에서 훨씬 나을 것 같네요. 저라면 베플을 뽑아서 따로 wr_id를 저장해두는 로직을 만들어두면 좋을 것 같고요.
3. 잘 모르지만 맨 마지막에 limit 1을 붙여보고 효과가 있나 확인해보세요.
얼마나 시간이 걸리고 또 어떤상황에 일어나는지..