묻고답하기

저희 사이트 게시판 에서 제일 많은 게시물이 테이블 하나에 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 남기남
이승백 친구에게 메일보내기 기능.  
플래시나 디렉터로 동영상제어 [4] 2007.08.10
스볼 플래시 버튼으로 플래시위에 레이어 감추기 [1] 2007.08.10
햐얀바람 신의 키스 소스중에 자바스크립트에서 이미지에 들어가면 버튼으로 제어하는 소스 질문....  
김기열 포토샵에서요 [1] 2007.08.10
나르미스 fsockopen 할대 상대가 방화벽이면??  
장은미 노프레임홈에서요.. [2] 2007.08.10
레마... input, 혹은 textarea에 관련하여  
거선 여기처럼 만들려고 하는데요... 간단한것 같은데 [1] 2007.08.10
정미옥 누가좀 도움을.... [3] 2007.08.10
WEd™ php 게시판리스트 출력시 넘 느려요  
peacemaker00 이미지를 이런 형식으로 변화 시키려면 어떻게 해야하나요?  
김경미 서버 등록자에 관해  
강성민 3단 동적 Select 문 관련 질문입니다.  
보리뚱땡 체크 박스에 대한 질문 다시요 --;  
이화일 어렵게 계정을 받았는데요. 서버가 asp를 쓰더라구요.  
강성민 초보의 태그(태그관련이 맞는지도 모르겠네요)에 관한 질문입니다.  
-G.W- 아이프레임을 이용하지 않고 메인부분만 바뀌게 하는법을 알고 싶습니다..^^:;  
jang 외부로그인 홈페이지 삽입에 대해서 알려주세영..책을 보고 똑같이 따라 했더니 자꾸 에러메세지만 뜨고.....  
NETSIA 노프레임 홈페이지 만들다가 오류가 [1] 2007.08.10
문영기 asp에서 노프레임을 구현하는 방법 좀 알려주세염... [3] 2007.08.10
이주연 미치겠습니다. 제로보드좀... [1] 2007.08.10
하정민 표 질문입니다.  
저녁노을 엔터를 안쳤는데 다음줄로 내려오내요. 꼭좀 답.. [2] 2007.08.10
안준 웹프로그램밍 언어 ASP/JSP/PHP/ASP.NET 등 종류별 각각 설명 좀 부탁드리겠습니다. [1] 2007.08.10
보리뚱땡 체크박스로 체그된 값을 삭제하는 방법좀 알려주세요 [1] 2007.08.10
KOF초고수 플래시를 막을수 있는 태그소스 있나요? [2] 2007.08.10
오태진 값전달 이 이상해서 올립니다.. [2] 2007.08.10
카멜롯™ 파일명이 한글일때 이미지가 X 표시(URL Encode)  
이석남 나모에서 (<script language="javascript">)어디에 위치하는지 요 [1] 2007.08.10