게시물 복사 문의드려요. 처리 속도가 점점 느려져요.
본문
아래 소스코드를 이용하여 게시물 복사를 하려고 하는데요.
댓글이 있는 글을 복사할때 문제가 발생이 되어 문의드려요.
복사하려는 게시판에는 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하는 방법을 찾으세요
그리고 복사방법이 이상하네요
한번 복사가 끝난 게시물을 다음번 복사때는 제외해야 하는 것 아닌가요?
물리서버를 증설 시켜야되요~ 그거 아니면 서버관리자한테 의뢰를 해야되요~
루프문도 있고해서 이게 좀 타격이 생긴거 같아요