phpmyadmin으로 보면 Sorting result 또는 Sending data에 꽤 오랫동안 머물러 있는 SQL 문장이 있는데
그게 어딘가 문득 궁금해졌습니다. 불당팩은 필요한 데이터를 골라서 가지고 오게 프로그램이 되어 있어서
해당 SQL에서 select 하는 데이터를 가지고 프로그램을 검색해보니, bbs/view_comment.php 입니다.
// 코멘트 출력
$select_sql = " wr_id, mb_id, wr_name, wr_parent, wr_option, wr_content, wr_trackback, wr_datetime, wr_ip, wr_comment, wr_comment_reply, wr_singo,
wr_1, wr_2, wr_3, wr_4, wr_5, wr_6, wr_7, wr_8, wr_9, wr_10, wr_password ";
if ($board[bo_use_sideview]) {
$select_sql .= " ,wr_email , wr_homepage ";
}
$select_sql = " wr_id, mb_id, wr_name, wr_parent, wr_option, wr_content, wr_trackback, wr_datetime, wr_ip, wr_comment, wr_comment_reply, wr_singo,
wr_1, wr_2, wr_3, wr_4, wr_5, wr_6, wr_7, wr_8, wr_9, wr_10, wr_password ";
if ($board[bo_use_sideview]) {
$select_sql .= " ,wr_email , wr_homepage ";
}
$sql = " select $select_sql from $write_table where wr_parent = '$wr_id' and wr_is_comment = 1 order by wr_comment, wr_comment_reply ";
$result = sql_query($sql);
$result = sql_query($sql);
별다른 것도 없는거 같은데, 이게 왜 느린 속도의 원인이 되었을까요????
빨간 글씨로 나타낸 것과 같이 order by 때문 입니다.
안그래도 많은 데이터를 가지고 와서 정렬하는 동안, 해당 테이블에는 Lock이 걸리게 됩니다.
여기서 지난번 게시판 검색의 종결자 코드에서 있었던, tmp table의 이슈를 다시 생각해 봅니다.
그냥 데이터를 tmp 테이블로 가지고 와서, tmp 테이블에서 정렬을 하면 어떤가 하는 것이죠.
그렇게 되면, 정렬을 하는 동안 (Sorting result) DB에 아무련 영향을 미치지 않을 수 있거든요.
이 방법의 장점은 코멘트가 많을 경우 효과적이라는 것이고,
단점은 모든 게시글 조회에 대해서 tmp 테이블을 만드는 것 입니다.
이런 경우에는 실환경에서 어느것이 더 효율적인지 실제 실행을 해보기 전에는 알수 없겠죠???
테스트 결과 : 너무 빈번한 tmp 테이블 생성은 오히려 속도에 더 문제를 일으킵니다.
코멘트 겟수를 게시글 DB에 넣고 있는 경우에는 100개 이상의 경우에만 tmp table을 쓰게
수정하면 효과가 있을 거 같습니다.
- opencode.co.kr -