슬로우쿼리 해결방법이 있을까요?
본문
1. 일일 댓글 합계를 체크해서 포인트를 지급하는데
아래와 같은 슬로우쿼리가 발생하고있습니다.
select SUM(po_point) as point FROM `g5_point` WHERE mb_id ='xxxxxx' and po_rel_action='댓글' and TO_DAYS(po_datetime) = TO_DAYS('2018-11-12 00:19:18')
2. 출석체크 부분때문인진 몰라도 출석자가 몰리면 아래와 같은 슬로우쿼리가 발생하고있습니다.
select * from g5_member where mb_id = TRIM('xxxxx')
2가지 해결방법이 있을까요? 도움좀 부탁드립니다ㅣ. ㅠ.ㅠ
답변 3
1. 지우게 되면 포인트 내역에 문제가 있을수 있겠지만
혹여 연도별로 커스텀을 한다면 좀 나아지지 싶습니다.
그리고 키는 다른곳에서 별도로 where절 줄수 있으니 확인하시고 멀티로 잡으시던지 해야할것 같습니다.
2. 회원수가 얼마나 되길래 그러는지 의문이 생깁니다.
혹시 해당 mb_id 조회하는 쿼리가 아닌 다른 부분에서 슬로우쿼리가 발생하는게 아닐까요
1. 전체 레코드수가 얼마나 될까요?
po_rel_action 컬럼과 po_datetime 컬럼에 인덱스를 추가해보세요
2. mb_id는 키가 잡혀있을텐데.. 이 역시 회원수가 얼마나 되나요?
과부하가 걸릴만한 컬럼은
and TO_DAYS(po_datetime) = TO_DAYS('2018-11-12 00:19:18')
여기 같네요
po_datetime 이 문제인데
일별 포인트를 체크하는것이라면
po_datetime을 기록하는 시점에
date를 별도로 기록하게 만드는것도 방법입니다.
별도로 만든 컬럼의 이전데이타는 밀어 넣는 형태로 update문 하나면 해결될것이구요
date에 index를 걸고
비교날짜를 문자형으로 단일 비교하면
속도는 급증할듯 싶네요