테스트 사이트 - 개발 중인 베타 버전입니다

슬로우쿼리 해결방법이 있을까요? 채택완료

흐하잉 7년 전 조회 3,079

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개

채택된 답변
+20 포인트
7년 전

1. 지우게 되면 포인트 내역에 문제가 있을수 있겠지만

혹여 연도별로 커스텀을 한다면 좀 나아지지 싶습니다.

그리고 키는 다른곳에서 별도로 where절 줄수 있으니 확인하시고 멀티로 잡으시던지 해야할것 같습니다.

 

2. 회원수가 얼마나 되길래 그러는지 의문이 생깁니다.

혹시 해당 mb_id 조회하는 쿼리가 아닌 다른 부분에서 슬로우쿼리가 발생하는게 아닐까요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

흐하잉
7년 전
회원수는 2만명밖에 되지않습니다.
출석체크가 몰리는 시간에 저렇게 슬로우쿼리가 나오는거보니 그럼 소스를 손봐야 해결이 되는건가요?? 신경써주셔서 감사합니다. 채택해드렸습니다. ㅠ.ㅠ

댓글을 작성하려면 로그인이 필요합니다.

플래토
7년 전

과부하가 걸릴만한 컬럼은

and TO_DAYS(po_datetime) = TO_DAYS('2018-11-12 00:19:18')

여기 같네요

 

po_datetime 이 문제인데

 

일별 포인트를 체크하는것이라면

po_datetime을 기록하는 시점에

date를 별도로 기록하게 만드는것도 방법입니다.

 

별도로 만든 컬럼의 이전데이타는 밀어 넣는 형태로 update문 하나면 해결될것이구요

 

date에 index를 걸고

비교날짜를 문자형으로 단일 비교하면

속도는 급증할듯 싶네요

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

7년 전

1. 전체 레코드수가 얼마나 될까요?

po_rel_action 컬럼과 po_datetime 컬럼에 인덱스를 추가해보세요

 

2. mb_id는 키가 잡혀있을텐데.. 이 역시 회원수가 얼마나 되나요?

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

흐하잉
7년 전
답변감사드립니다.
1. po_datetime, po_rel_action 이 2개를 묶어서 인덱스 줘야되나요?ㅠ
데이터는 100만개정도 되는데. 맘값아선 비워버리고싶은데 이걸 비워버리면 회원 포인트가 다꼬이는거 아닌지요..ㅠㅠ
2. mb_id 값은 이미 인덱스값에 unique 인덱스가 걸려있는데 여기서 추가로 더 해야될게있나요??

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인