[질문] 글 보기에서 이전글 다음글 추출 때문에 게시글 보기 속도가 느림 정보
[질문] 글 보기에서 이전글 다음글 추출 때문에 게시글 보기 속도가 느림본문
게시물 건수가 작을 때는 몰랐는데
어느 순간 특정 게시판이 느려졌다 싶었어요.
그래서 다른 게시판을 보니 빠르더군요.
원인은 느린 게시판은 글 수가 4만 건이 넘고 빠른 게시판은 몇 천 건이더군요.
그래서 여기 저기 실행 속도 검사를 해 보고 원인이 있는 곳을 찾았습니다.
/bbs/view.php의 소스에 실행 시간을 검사하는 코드를 넣었습니다.
아래는 소스의 일부입니다.
==================================================
=========================
sql문을 보면
select wr_id, wr_subject from g4_write_myboard where wr_is_comment = 0 and wr_num > '-42817' order by wr_num, wr_reply limit 1
여기서
order by wr_num, wr_reply
요넘 때문에 속도가 느린 것 같아요.
이걸 뺴고 쿼리를 날리면 0.000얼마 걸리는데
저 상태는 0.7초 가량 걸립니다.
글 조회할 때 0.7초는 세월이거든요...
인덱스를 새로 추가해 보았으나 마찬가지였습니다.
인덱추가 wr_num 하나만
인덱추가 wr_reply 하나만
인덱추가 wr_num, wr_reply 합쳐서
인덱추가 wr_num, wr_id 등등등
여러가지로 인덱스를 잡아도 속도가 나아지지 않네요.
다음은 mysql의 explain 값입니다.
id 1
select_type SIMPLE
table g4_write_myboard
type ref
possible_keys wr_num_reply_parent,wr_is_comment
key wr_is_comment
key_len 1
ref const
rows 42799
Extra Using where; Using filesort
/etc/my.cnf 에서 sort buffer 크기 키워 보기도 했지만 속도 향상 안 되네요.
이렇게 시간을 많이 잡아 먹는데, 좋은 해결 방안이 없을까요?
경험이 있으시거나 해결 방안이 있으신 분들의 조언을 부탁 드려 봅니다.
감사합니다.
어느 순간 특정 게시판이 느려졌다 싶었어요.
그래서 다른 게시판을 보니 빠르더군요.
원인은 느린 게시판은 글 수가 4만 건이 넘고 빠른 게시판은 몇 천 건이더군요.
그래서 여기 저기 실행 속도 검사를 해 보고 원인이 있는 곳을 찾았습니다.
/bbs/view.php의 소스에 실행 시간을 검사하는 코드를 넣었습니다.
아래는 소스의 일부입니다.
==================================================
// 아래글을 얻음
$sql = " select wr_id, wr_subject, wr_datetime from $write_table where wr_is_comment = 0 and wr_num = '$write[wr_num]' and wr_reply > '$write[wr_reply]' $sql_search order by wr_num, wr_reply limit 1 ";
$next = sql_fetch($sql);
// 위의 쿼리문으로 값을 얻지 못했다면
if (!$next[wr_id]) {
////////////////////////////// 여기에 넣고
echo ("\n<!-- exec time : ". (get_microtime() - $begin_time) . "--->\n");
$sql = " select wr_id, wr_subject, wr_datetime from $write_table where wr_is_comment = 0 and wr_num > '$write[wr_num]' $sql_search order by wr_num, wr_reply limit 1 ";
$next = sql_fetch($sql);
///////////////////////////// 여기에도 넣고
echo ("\n<!-- exec time : ". (get_microtime() - $begin_time) . " ( $sql ) --->\n");
}
=========================
sql문을 보면
select wr_id, wr_subject from g4_write_myboard where wr_is_comment = 0 and wr_num > '-42817' order by wr_num, wr_reply limit 1
여기서
order by wr_num, wr_reply
요넘 때문에 속도가 느린 것 같아요.
이걸 뺴고 쿼리를 날리면 0.000얼마 걸리는데
저 상태는 0.7초 가량 걸립니다.
글 조회할 때 0.7초는 세월이거든요...
인덱스를 새로 추가해 보았으나 마찬가지였습니다.
인덱추가 wr_num 하나만
인덱추가 wr_reply 하나만
인덱추가 wr_num, wr_reply 합쳐서
인덱추가 wr_num, wr_id 등등등
여러가지로 인덱스를 잡아도 속도가 나아지지 않네요.
다음은 mysql의 explain 값입니다.
id 1
select_type SIMPLE
table g4_write_myboard
type ref
possible_keys wr_num_reply_parent,wr_is_comment
key wr_is_comment
key_len 1
ref const
rows 42799
Extra Using where; Using filesort
/etc/my.cnf 에서 sort buffer 크기 키워 보기도 했지만 속도 향상 안 되네요.
이렇게 시간을 많이 잡아 먹는데, 좋은 해결 방안이 없을까요?
경험이 있으시거나 해결 방안이 있으신 분들의 조언을 부탁 드려 봅니다.
감사합니다.
댓글 전체
=== 자답입니다 ===
아래글을 얻는 쿼리 두 번째 것을 수정했습니다.
이 부분을 수정했습니다.
먼저 is_comment에 무관하게 자료를 추출한 후 is_comment=0 인 넘만 골라 내면 훨씬 빠릅니다.
다음과 같이 개선했습니다.
먼저 is_comment 걸르지 말고 2000 개 추출한 다음....
(어차피 comment가 2000개는 안 될 거라 믿고...)
그 중에서 comment 아닌 넘을 골라 내어 ORDER BY 하면
결과가 훨씬 빠르게 나옵니다.
0.7초 걸리던 것이
0.02초에 해결됩니다.
도움이 되시길...
아래글을 얻는 쿼리 두 번째 것을 수정했습니다.
// 위의 쿼리문으로 값을 얻지 못했다면
$sql = " select wr_id, wr_subject, wr_datetime from $write_table where wr_is_comment = 0 and wr_num > '$write[wr_num]' $sql_search order by wr_num, wr_reply limit 1 ";
이 부분을 수정했습니다.
먼저 is_comment에 무관하게 자료를 추출한 후 is_comment=0 인 넘만 골라 내면 훨씬 빠릅니다.
다음과 같이 개선했습니다.
$sql = " SELECT * FROM (
select wr_id, wr_subject, wr_is_comment, wr_num, wr_reply from $write_table where wr_num > '$write[wr_num]' $sql_search order by wr_num, wr_reply limit 2000
) Z WHERE wr_is_comment=0
ORDER BY wr_num, wr_reply LIMIT 1";
$next = sql_fetch($sql);
먼저 is_comment 걸르지 말고 2000 개 추출한 다음....
(어차피 comment가 2000개는 안 될 거라 믿고...)
그 중에서 comment 아닌 넘을 골라 내어 ORDER BY 하면
결과가 훨씬 빠르게 나옵니다.
0.7초 걸리던 것이
0.02초에 해결됩니다.
도움이 되시길...