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

100만건이 넘는 데이터의 카운트를 조정하려할때,

· 14년 전 · 6968 · 9
그누보드 게시판 관리자페이지에 보면,
해당게시판의 카운트를 조절하는 부분이 있습니다.
기존방식으로 하면 다소 느릴 수 있는 것을 최적화 해보았습니다.
 
파일 : /adm/board_form_update.php
라인 : 207 라인근처 ( // 글수 조정 ) 주석 아래입니다.
 
 변경전
 // 글수 조정
    if ($proc_count) {
        // 원글을 얻습니다.
        $sql = " select wr_id from $g4[write_prefix]$bo_table where wr_is_comment = 0 ";
        $result = sql_query($sql);
        for ($i=0; $row=sql_fetch_array($result); $i++) {
   // 코멘트수를 얻습니다.
            $sql2 = sql_query(" select count(*) as cnt from $g4[write_prefix]$bo_table where wr_parent = '$row[wr_id]' and wr_is_comment = 1 ");
            $row2 = sql_fetch_array($sql2);
            sql_query(" update $g4[write_prefix]$bo_table set wr_comment = '$row2[cnt]' where wr_id = '$row[wr_id]' ");
   echo ".";
   if ($i%50==0) { echo "<br/>";  flush(); }
        }
  mysql_free_result($result);
 }
 
 
 
변경후
 // 글수 조정
    if ($proc_count) {
        // 원글을 얻습니다.
        $sql = " select a.wr_id,count(b.wr_parent) as cnt from $g4[write_prefix]$bo_table a, $g4[write_prefix]$bo_table b where a.wr_id=b.wr_parent and a.wr_is_comment=0 group by a.wr_id";
        $result = sql_query($sql);
        for ($i=0; $row=sql_fetch_array($result); $i++) {
   
        sql_query(" update $g4[write_prefix]$bo_table set wr_comment = '$row[cnt]' where wr_id = '$row[wr_id]' ");
   echo ".";
   if ($i%50==0) { echo "<br/>";  flush(); }
        }
  mysql_free_result($result);
 }
 
 
 

댓글 작성

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

로그인하기

댓글 9개

멋집니다
백만건이 아니라 몇 만건만 되어도 부담 스러운데...
14년 전
추천 드립니다. ^^
14년 전
멋집니다.
14년 전
추천드립니다.
좋네요 !
group by a.wr_id desc 에서
desc는 어떤 의미로 있는건가요?
성능상 좋을 이유는 없을것 같아서요
그렇네요. 아마 제가 저부분 테스트 하면서 100만건의 데이터가 타게시판 3개를 통합한거라, 순차적으로 잘나왔는지 확인할려고 끼워넣어두었던 겁니다^^;;

수정하였습니다!
12년 전
이 글 방법을 토대로 해봤는데 속도는 빨라졌습니다.

하지만 오류가 있는거 같네요. 카운트 조정을 하게 되면 코멘트를 작성하지 않은 글에 +1 코멘트 댓글이 달려있다고 뜹니다. 그 게시물을 들어가보면 코멘트를 단 사람은 없는데 말이지요.

어떻게 해야 하나요 ?
14년 전
좋은팁 감사해요
12년 전
감사합니다^^

게시글 목록

번호 제목
34021
33994
33922
33895
33889
33882
33868
33863
33859
33857
33849
33842
33835
33830
33828
33807
33797
33796
33791
33786