묻고답하기

저희 사이트 게시판 에서 제일 많은 게시물이 테이블 하나에 3만건 정도 밖에 안되거든요?
근데 게시판 목록 한번 열라면 제일 느린 테이블은 거즘 7~8초
좀 나은건 약 1~2초 정도 걸립니다.
환장하겠습니다.
전에 외주줘서 만들었다는데요. 어떻게 손을 대야할지.. 걱정됩니다.
그래서 도움을 청합니다.

1. 게시판 테이블 구조

2. 게시판 목록을 불러올때 사용하는 함수

3. 게시판 목록 출력되는 부분

으로 나눠 정리 해보았습니다.
확인후 많은 분들 조언및 의견 부탁드립니다.




// 게시판 테이블 구조

CREATE TABLE TAB_Boardmnw (
  BOD_Rowid int(11) NOT NULL auto_increment,
  BOD_Memid varchar(12) NOT NULL default '',
  BOD_Parent int(11) NOT NULL default '0',
  BOD_Indent int(11) NOT NULL default '0',
  BOD_Depth int(3) NOT NULL default '0',
  BOD_Name varchar(32) NOT NULL default '',
  BOD_Email varchar(64) NOT NULL default '',
  BOD_Subject varchar(64) NOT NULL default '',
  BOD_Sex char(2) NOT NULL default '',
  BOD_Avata int(1) NOT NULL default '0',
  BOD_Type char(1) NOT NULL default 'T',
  BOD_Contents text NOT NULL,
  BOD_Filename varchar(32) NOT NULL default '',
  BOD_Hit int(11) NOT NULL default '0',
  BOD_Opinion int(4) NOT NULL default '0',
  BOD_Against int(4) NOT NULL default '0',
  BOD_Date int(11) NOT NULL default '0',
  PRIMARY KEY  (BOD_Rowid),
  KEY BOD_Memid (BOD_Memid),
  KEY BOD_Parent (BOD_Parent),
  KEY BOD_Indent (BOD_Indent),
  KEY BOD_Email (BOD_Email)
) TYPE=MyISAM;




<?
// 함수 시작

function get_pagenum() {
global $board, $perpage;
include        "config/db_conn.php3";
$result        = mysql_query("SELECT COUNT(*) FROM        $board");
$tlpn[num] = mysql_result($result, 0, "COUNT(*)");
if ($tlpn[num] % $perpage) {
$tlpn[page]= intval($tlpn[num] / $perpage) + 1;
}
else {
$tlpn[page]= $tlpn[num]        / $perpage;
}
return $tlpn;
}


function arti_list($tlpn,$perpage)
{
include        "config/db_conn.php3";
global $board, $page;
$result        = lpp($tlpn, $perpage, $page);
return $result;
}


function lpp($tlpn,        $perpage, $page) {
global $board;
include        "config/db_conn.php3";
if (($tlpn[page] > $page) && ($page        > 1)) {        //******************* 중간페이지
$startlist = ($page        * $perpage)        - $perpage;
$result        = mysql_query("SELECT *        FROM $board        ORDER BY BOD_Parent        DESC, BOD_Indent ASC LIMIT $startlist,$perpage");
}
elseif ($page == 1)        { // ***************************************** 첫 페이지라면..
if ($tlpn[num] >= $perpage)        {
$result        = mysql_query("SELECT *        FROM $board        ORDER BY BOD_Parent        DESC, BOD_Indent ASC LIMIT 0,$perpage");
}
else {
$result        = mysql_query("SELECT *        FROM $board        ORDER BY BOD_Parent        DESC, BOD_Indent ASC LIMIT 0,$tlpn[num]");
}
}
elseif ($tlpn[page]        == $page) {        // ********************************        맨 마지막 페이지라면..
if ($tlpn[num] % $perpage) {
$startlist = ($page        * $perpage)        - $perpage;
$result        = mysql_query("SELECT *        FROM $board        ORDER BY BOD_Parent        DESC, BOD_Indent ASC LIMIT $startlist,$perpage");
}
else {
$startlist = ($page        * $perpage)        - $perpage;
$result        = mysql_query("SELECT *        FROM $board        ORDER BY BOD_Parent        DESC, BOD_Indent ASC LIMIT $startlist,$perpage");
}
}
else {
echo "잘못된 페이지";
exit;
}
return $result;
}
?>


//게시판 목록 출력하는 스크립트

<?
$tlpn =        get_pagenum();
$result        = arti_list($tlpn,$perpage);
$q = ($page        * $perpage)        - $perpage;
$p = $tlpn[num]        - $q;
while ($list = mysql_fetch_array($result)) {
$Nbsp =        "";
$DEPTH_Img = "";
for        ($j=0; $j <        $list[BOD_Depth]; $j++)        {
$Nbsp .= "   ";
}
if ($list[BOD_Depth] > 0) {
$DEPTH_Img = "<img src="img/bbt_re.gif" border="0">";
}
if ($list[BOD_Email]) {
$BOD_Name =        "<a        href="mailto:$list[BOD_Email]">$list[BOD_Name]</a>";
}else {
$BOD_Name =        $list[BOD_Name];
}
$BOD_Date =        date("Y.m.d",$list[BOD_Date]);
$BOD_Subject = stripslashes($list[BOD_Subject]);
?>
<tr>
<td        align="center" height="27"><?=$p?></td>
<td></td>
<td><?=$Nbsp?><?=$DEPTH_Img?><a        href="board_mnw_view.html?BOD_Id=<?=$list[BOD_Rowid]?>&page=<?=$page?>"><?=$BOD_Subject?></a>
<!-- 의견글        카운트 -->
<?
$result1 = mysql_query("SELECT BOD_Rowid FROM TAB_Opinion WHERE        BOD_Board='$board' AND BOD_Parent='$list[BOD_Rowid]'");
$O_Count = mysql_num_rows($result1);
if ($O_Count > 0) {
echo "(        $O_Count )";
}
?>
<?
$OUT_Time =        60*60*24*1;
$TIME_Diff = time()        - $list[BOD_Date];
if ($TIME_Diff < $OUT_Time)        {echo "  <img        src='img/new.gif' align='absmiddle'>";}
?>
</td>
<td></td>
<td        align="center"><?=$BOD_Name?></td>
<td></td>
<td        align="center"><?=$list[BOD_Hit]?></td>
<td></td>
<td        align="center"><font color="#999999"><?=$BOD_Date?></font></td>
<td></td>
<td        align="center"><font color="#006600">
<?=$list[BOD_Opinion]?></font>/<font color="#CC0000"><?=$list[BOD_Against]?></font>
</td>
</tr>
<tr>
<td        height="1" colspan="11"        bgcolor="ECECEC"></td>
</tr>
<?$p--;}?>

글쓴이 제목 최종 글
XE 공지 글 쓰기,삭제 운영방식 변경 공지 [16] 2019.03.05 by 남기남
문영기 asp에서 노프레임을 구현하는 방법 좀 알려주세염... [3] 2007.08.10
NETSIA 노프레임 홈페이지 만들다가 오류가 [1] 2007.08.10
jang 외부로그인 홈페이지 삽입에 대해서 알려주세영..책을 보고 똑같이 따라 했더니 자꾸 에러메세지만 뜨고.....  
-G.W- 아이프레임을 이용하지 않고 메인부분만 바뀌게 하는법을 알고 싶습니다..^^:;  
강성민 초보의 태그(태그관련이 맞는지도 모르겠네요)에 관한 질문입니다.  
이화일 어렵게 계정을 받았는데요. 서버가 asp를 쓰더라구요.  
보리뚱땡 체크 박스에 대한 질문 다시요 --;  
강성민 3단 동적 Select 문 관련 질문입니다.  
김경미 서버 등록자에 관해  
peacemaker00 이미지를 이런 형식으로 변화 시키려면 어떻게 해야하나요?  
WEd™ php 게시판리스트 출력시 넘 느려요  
정미옥 누가좀 도움을.... [3] 2007.08.10
거선 여기처럼 만들려고 하는데요... 간단한것 같은데 [1] 2007.08.10
레마... input, 혹은 textarea에 관련하여  
장은미 노프레임홈에서요.. [2] 2007.08.10
나르미스 fsockopen 할대 상대가 방화벽이면??  
김기열 포토샵에서요 [1] 2007.08.10
햐얀바람 신의 키스 소스중에 자바스크립트에서 이미지에 들어가면 버튼으로 제어하는 소스 질문....  
스볼 플래시 버튼으로 플래시위에 레이어 감추기 [1] 2007.08.10
플래시나 디렉터로 동영상제어 [4] 2007.08.10
이승백 친구에게 메일보내기 기능.  
이승백 ''북마크하기'' 및 ''시작페이지로 등록''을 위한 자바스크립트  
둡-_- 이런그림 어떻게 만들어야 하나요? [3] 2007.08.10
박소영 꺅 윈도우 다시 깔았더니 ftp 실행하니깐 폴더가 없어졌어요  
REDsky 텍스트에 마우스를 롤오버 하면  
-G.W- 포토샵에서 36-40포인트로 깨끝하게 나오는 폰트가 있을가요? [3] 2007.08.10
정병환 이런 홈페이지를 만들고 싶은데요.. [3] 2007.08.10
윤수리 프레임내의 HTML문서로 바로 이동하기??  
K-POP ★★★ 포토샵에서 인물이랑 배경이랑 합성할때 ★★★ [1] 2007.08.10
Ken 이런식의 슬라이딩 메뉴 어떻게 하죠?