게시물 복사 문의드려요. 처리 속도가 점점 느려져요.

게시물 복사 문의드려요. 처리 속도가 점점 느려져요.

QA

게시물 복사 문의드려요. 처리 속도가 점점 느려져요.

본문

아래 소스코드를 이용하여 게시물 복사를 하려고 하는데요.

댓글이 있는 글을 복사할때 문제가 발생이 되어 문의드려요.

 

복사하려는 게시판에는 wr_id 가 새로 생성이 되어서,  wr_parent 값을 모두 바꿔야하는데요.

wr_homepage에 wr_parent 값을 저장해서 새로 생성된 wr_id를 wr_homepage를 이용해서 찾고

업데이트로 저장된 모든 게시물을 검색해서 wr_parent 를 바꾸려고 하니, 게시물이 쌓일수록

처리 속도가 점점 느려지는 문제가 발생되고 있어요.

10번정도 복사하니 10초정도 느려졌어요. 한번 복사할때마다 1초씩 느려지는 것 같아요.

속도가 느려지지 않게 하거나, insert할때 바로 wr_parent를 넣을 방법이 없을까요?

도움 부탁 드려요ㅜㅜ

 

        $write_table = "g5_write_news";
        $move_write_table = "g5_write_history";
 

        $next_wr_num_2 = get_next_num($move_write_table);
        
        $sql2 = " select * from $write_table order by wr_parent, wr_is_comment, wr_comment desc, wr_id ";
        $result2 = sql_query($sql2);
        
        while ($row2 = sql_fetch_array($result2))
        {
            $sql = " insert into $move_write_table
                        set wr_num = " . ($next_wr_num_2 ? "'$next_wr_num_2'" : "(SELECT IFNULL(MIN(wr_num) - 1, -1) FROM $move_write_table sq) ") . ",
                             wr_parent = '{$row2['wr_parent']}',
                             wr_reply = '{$row2['wr_reply']}',
                             wr_is_comment = '{$row2['wr_is_comment']}',
                             wr_comment = '{$row2['wr_comment']}',
                             wr_comment_reply = '{$row2['wr_comment_reply']}',
                             ca_name = '".addslashes($row2['ca_name'])."',
                             wr_option = '{$row2['wr_option']}',
                             wr_subject = '".addslashes($row2['wr_subject'])."',
                             wr_content = '".addslashes($row2['wr_content'])."',
                             wr_link1 = '".addslashes($row2['wr_link1'])."',
                             wr_link2 = '".addslashes($row2['wr_link2'])."',
                             wr_link1_hit = '{$row2['wr_link1_hit']}',
                             wr_link2_hit = '{$row2['wr_link2_hit']}',
                             wr_hit = '{$row2['wr_hit']}',
                             wr_good = '{$wr_good}',
                             wr_nogood = '{$wr_nogood}',
                             mb_id = '{$row2['mb_id']}',
                             wr_password = '{$row2['wr_password']}',
                             wr_name = '".addslashes($row2['wr_name'])."',
                             wr_email = '".addslashes($row2['wr_email'])."',
                             wr_homepage = '{$row2['wr_parent']}',
                             wr_datetime = '".G5_TIME_YMDHIS."',
                             wr_file = '{$row2['wr_file']}',
                             wr_last = '{$row2['wr_last']}',
                             wr_ip = '{$row2['wr_ip']}',
                             wr_1 = '".addslashes($row2['wr_1'])."',
                             wr_2 = '".addslashes($row2['wr_2'])."',
                             wr_3 = '".addslashes($row2['wr_3'])."',
                             wr_4 = '".addslashes($row2['wr_4'])."',
                             wr_5 = '".addslashes($row2['wr_5'])."',
                             wr_6 = '".addslashes($row2['wr_6'])."',
                             wr_7 = '".addslashes($row2['wr_7'])."',
                             wr_8 = '".addslashes($row2['wr_8'])."',
                             wr_9 = '".addslashes($row2['wr_9'])."',
                             wr_10 = '".addslashes($row2['wr_10'])."' ";
            sql_query($sql);
            
            $insert_id = sql_insert_id();
            if($row2['wr_id'] == $row2['wr_parent']){
              sql_query(" update $move_write_table set wr_parent = '$insert_id' where wr_id = '$insert_id' ");
              }
        }
        
        $sql3 = " select * from $move_write_table where wr_is_comment = 0 and wr_homepage != 'A' order by wr_parent, wr_is_comment, wr_comment desc, wr_id ";
        $result3 = sql_query($sql3);
        
        while ($row3 = sql_fetch_array($result3))
        {
          
          $sql4 = " select * from $move_write_table where wr_homepage = '{$row3['wr_homepage']}' and wr_homepage != 'A' order by wr_parent, wr_is_comment, wr_comment desc, wr_id ";
          $result4 = sql_query($sql4);
          while ($row4 = sql_fetch_array($result4))
          {
            sql_query(" update $move_write_table set wr_parent = '{$row3['wr_id']}' where wr_id = '{$row4['wr_id']}' ");
            sql_query(" update $move_write_table set wr_homepage = 'A' where wr_id = '{$row4['wr_id']}' ");
          }
          
          sql_query(" update $move_write_table set wr_homepage = 'A' where wr_id = '{$row3['wr_id']}' ");
          
        }

이 질문에 댓글 쓰기 :

답변 2

 

생각나는대로 몇가지 수정해보면 다음과 같습니다

 

=== $sql2 order 변경 -- wr_comment desc 은 전혀 쓸모없는 정렬입니다

order by wr_parent, wr_is_comment, wr_comment, wr_comment_reply ";

 

 ===wr_num값이 맞지않게 들어가겠네요

  $next_wr_num_2 = get_next_num($move_write_table); <=== 위치변경

 

    $wr_parent = 99999; 

        while ($row2 = sql_fetch_array($result2)){

           //이렇게 하면 order by에 의해 댓글 wr_num값이 원글 값과 동일하게 들어 갑니다
            if($row2['wr_is_comment'] ==0){

                $next_wr_num_2 = get_next_num($move_write_table);
            }
            $sql = " insert into $move_write_table set wr_num ='$next_wr_num_2' ,wr_parent ='$wr_parent',

 

== wr_parent update하는 코드를 잘 생각해보면 $sql3 이하 loop돌면서 시간을 걸리게 하는

     부분을 없앨 수 있겠습니다(복사하기를 해보면서 테스트 하면 답이 나올 것 같은데....)

      wr_homepage 값도 필요없겠습니다

     $sql3 부터 코드가 상당히 안좋습니다

없어도 되는 방법이 있기도 하지만 update를 한번만에 될 것을 두번 나누어서 하고 있네요

 

== 마지막에 g5_board에 게시물 count를 update하는 코드가 있어야 합니다

     insert할때마다 count update 쿼리를 할 것이 아니라 모든 게시물 등록 후 마지막에 한번만

     update하는 방법을 찾으세요

 

그리고 복사방법이 이상하네요

한번 복사가 끝난 게시물을 다음번 복사때는 제외해야 하는 것 아닌가요?

 

 

 

 

 

 

균이님 답변 감사드려요.
move_update.php 파일을 보면
sql_query(" update $move_write_table set wr_parent = '$save_parent' where wr_id = '$insert_id' ");
이부분에서 wr_parent를 저장하는 것 같은데, 위에 보면
$save_parent = $insert_id; 에서 wr_id를 가져오잖아요?
이렇게 하면, 원본에서 바뀐 게시물의 wr_id가 저장이 안되고 자신의 wr_id가 저장이 되어서요.
그래서 while문을 두번이나 돌리게 되었는데ㅜㅜ 많이 어렵네요.
제가 문법의 기초가 안되어있어서 늘 많이 헤매고 있습니다.
도움 부탁드려요~ㅜㅜ

원본 게시물은 내용만 조금씩 바뀌는 같은 게시물이고 하루에 한번씩 히스토리에 저장해서 날짜별로 비교해보려고 해요

물리서버를 증설 시켜야되요~ 그거 아니면 서버관리자한테 의뢰를 해야되요~ 

루프문도 있고해서 이게 좀 타격이 생긴거 같아요

답변을 작성하시기 전에 로그인 해주세요.
전체 150
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT