채택완료

mysql 과부하 문제

2014-07-21 (월) 12:54:04 4,467

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

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

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

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

무슨 좋은 방법이 없을가요

|

답변 4개

채택된 답변
+20 포인트
2014-07-21 (월) 13:56:28

데이터가 많을때 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 

Copy
$sql = " select count(*) cnt from aabbcc where bo_table = 'abc' ";$result = sql_query($sql);$row = sql_fetch_array($result);$sql = " select * from aabbcc where bo_table = 'abc' limit ".rand(0,$row['cnt']-1).',1';$result = sql_query($sql);$row = sql_fetch_array($result);
2014-07-21 (월) 13:27:21

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

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

2014-07-21 (월) 12:59:05

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

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

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