100만건이 넘는 데이터의 카운트를 조정하려할때, 정보
100만건이 넘는 데이터의 카운트를 조정하려할때,본문
그누보드 게시판 관리자페이지에 보면,
해당게시판의 카운트를 조절하는 부분이 있습니다.
기존방식으로 하면 다소 느릴 수 있는 것을 최적화 해보았습니다.
파일 : /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++) {
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);
$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);
}
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++) {
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);
}
echo ".";
if ($i%50==0) { echo "<br/>"; flush(); }
}
mysql_free_result($result);
}
추천
9
9
댓글 9개
멋집니다
백만건이 아니라 몇 만건만 되어도 부담 스러운데...
백만건이 아니라 몇 만건만 되어도 부담 스러운데...
추천 드립니다. ^^
멋집니다.
추천드립니다.
좋네요 !
group by a.wr_id desc 에서
desc는 어떤 의미로 있는건가요?
성능상 좋을 이유는 없을것 같아서요
group by a.wr_id desc 에서
desc는 어떤 의미로 있는건가요?
성능상 좋을 이유는 없을것 같아서요
그렇네요. 아마 제가 저부분 테스트 하면서 100만건의 데이터가 타게시판 3개를 통합한거라, 순차적으로 잘나왔는지 확인할려고 끼워넣어두었던 겁니다^^;;
수정하였습니다!
수정하였습니다!
이 글 방법을 토대로 해봤는데 속도는 빨라졌습니다.
하지만 오류가 있는거 같네요. 카운트 조정을 하게 되면 코멘트를 작성하지 않은 글에 +1 코멘트 댓글이 달려있다고 뜹니다. 그 게시물을 들어가보면 코멘트를 단 사람은 없는데 말이지요.
어떻게 해야 하나요 ?
하지만 오류가 있는거 같네요. 카운트 조정을 하게 되면 코멘트를 작성하지 않은 글에 +1 코멘트 댓글이 달려있다고 뜹니다. 그 게시물을 들어가보면 코멘트를 단 사람은 없는데 말이지요.
어떻게 해야 하나요 ?
좋은팁 감사해요
감사합니다^^