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

mysql 과부하 문제 채택완료

노짱 11년 전 조회 4,122

약 10만개 정도의 데이터가 등록된 테이블에서 

 

select * from aabbcc where bo_table = 'abc' order by rand() limit 1

 

쿼리가 초당 1번 정도 호출됩니다.

 

오늘 데이터가 10만개 정도 넘어가니깐 load가 77까지 올라가는데

 

무슨 좋은 방법이 없을가요

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

답변 4개

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

데이터가 많을때 rand는 부하를 많이 차지합니다

select * from aabbcc where bo_table = 'abc' order by rand() limit 1

 

아래처럼 수정해 보세요

(select * from aabbcc where bo_table = 'abc') order by rand() limit 1 

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

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

11년 전

</p>$sql = " select count(*) cnt from aabbcc where bo_table = 'abc' ";<div>$result = sql_query($sql);</div><div>$row = sql_fetch_array($result);</div><div>$sql = " select * from aabbcc where bo_table = 'abc' limit ".rand(0,$row['cnt']-1).',1';</div><div>$result = sql_query($sql);</div>$row = sql_fetch_array($result);<p><span style="font-family: 돋움, Dotum, Helvetica, sans-serif; font-size: 12px; line-height: 1.5;">

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

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

11년 전

mysql 쓰신다면 DB형식을 innodb로 바꾸시구요

 

rand()를 쓰시는 이유를 정확히 알려주셔야 해결점을 찾을 수 있겠네요

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

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

11년 전

굳이 랜덤을 하는 이유가 있나요?

왜 랜덤을 해야하나에 따라 처리 방법이 다양합니다. 

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

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

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

로그인