리눅스, 자료실, 성경검색, 추억의게임, 고전게임, 오락실게임, rootman, http://www.rootman.co.kr
* 18.204.48.40 *
| Home | Profile | Linux | 자료실 | zabbix | Mysql 5.6 | 갤러리 | 성경검색 | 해피니스 | 자유게시판 | 게시물검색 | L | O | R |    

 
[php] [php] 최근 게시물보기 속도 빠르게 만들기
 작성자 : rootman
Date : 2013-02-28 17:53  |  Hit : 7,538  

출처 :
http://www.nzeo.com/bbs/zboard.php?id=cgi_tip&no=6606

최근 게시판 속도 빠르게 하는 방법입니다.

홈페이지에 제로보드 게시판을 이용하여 php 프로그램을 많이 하십니다.
특히 게시물이 많아질 수록 최근 게시물을 로드하는데 시간이 오래 걸림을 많이 느끼시게 될 것입니다.
그 문제를 해결하기 위해 여러가지로 알아 보았더니 원인은 바로 select 문에서 사용하는 order by 에 있었습니다.

예) select * from zetyx_board_free where is_secret=0 and father=0 order by no desc limit 10

order by 에 의해서 게시물이 정렬하는데 걸리는 시간은 n^2 (n 의 제곱) 에 비례합니다.
즉, 게시물이 10 개일 경우 100 에 해당하는 시간이 걸린다면, 게시물이 1000개인 경우 1,000,000 에 해당하는 시간이 걸린다는 것이죠.

실제로 최근 게시물 번호 ( no 필드) 가 4000 번인 게시물의 최근 리스트를 구해오는데 10초넘게 걸린 적도 있었습니다. (한번 구한 다음에는 DB 에 캐시가 저장되어 빠르게 구하지만...)
이런 문제를 해결하기 위해서 가장 최근의 게시물 몇개를 가져와서 그 것에 대해서 order by 를 적용하는 방법으로 속도를 향상 시킬 수 있습니다.

아래의 내용을 적용한 뒤에는 엄청난 효과를 보았습니다.
거의 누르자마자 화면이 뜰 정도의 속도 향상을 가져왔습니다.
제로보드 게시판을 사용하신다면 꼭 적용하셔서 홈페이지 처리속도도 향상시키시고, 서버 부하도 줄여 줍시다.

--------------------------------------------------------------------
outlogin.php 의 print_bbs 함수에 파란 색으로 표시된 부분을 삽입하시면 됩니다.

function print_bbs(...)

...

if($setup[use_alllist]) $target = "zboard.php?id=".$id;
else $target = "view.php?id=".$id;

$result = mysql_query("select * from $t_board"."_$id where is_secret=0 and father=0 order by no desc limit $num", $connect) or die(mysql_error());

----------------------------------------------------------------------

function print_bbs(...)
...

if($setup[use_alllist]) $target = "zboard.php?id=".$id;
else $target = "view.php?id=".$id;


// speed up by hankawi
$tmp = mysql_fetch_array(mysql_query("select max(no) from $t_board"."_$id"));
$max_no = $tmp[0];
if ($max_no > 500) { // 게시물 개수가 500개 이상일때만
   $mylimit = $max_no - 100; // 최종 100개를 대상으로
   $speedup = "no>$mylimit and";
} else {
  $speedup = "";
}


$result = mysql_query("select * from $t_board"."_$id where ".$speedup." is_secret=0 and father=0 order by no desc limit $num", $connect) or die(mysql_error());
//


 
 

Total. 645
번호 분류 제목 작성자 등록일 조회수
510 기초강좌 리눅스 쉘에서 html 메일 발송하기 rootman 01-27 7437
509 기초강좌 [ddos] 한 IP당 동시 접속량 제한과 자동차단 rootman 07-26 7433
508 Doc/Faq Fingerprinting을 이용한 80 포트(웹서버) 공격법들 (17) rootman 06-17 7428
507 mysql [mysql] LOCK TABLES/UNLOCK TABLES rootman 12-22 7421
506 기초강좌 하드디스크 온도 측정하기(smartctl 이용) rootman 12-31 7420
505 Doc/Faq Ethernet H/W 확인 및 설정 (46) rootman 10-15 7419
504 Doc/Faq [출처/linux.co.kr] 4/4 Sendmail의 보안 (47) rootman 03-14 7417
503 Shell 문자열 조각 대치(Substring Replacement) (16) rootman 10-16 7416
502 기초강좌 [dmraid] rootman 08-12 7396
501 qmail [qmail] qmail control 디렉터리 파일 설명 rootman 05-24 7362
500 qmail (스팸필터링) qmail + clamav 연동 rootman 06-03 7355
499 qmail [qmail] qq 451 crashed 오류 원인과 답 rootman 02-05 7350
498 php [php] 암호화 알고리즘 종류 루트맨 03-12 7318
497 windows tips [썬더버드] 모질라 썬더버드(Thunderbird) 백업과 복구 rootman 07-16 7314
496 Doc/Faq ucspi-tcp 란 무엇인가? (1) rootman 10-19 7310
 1  2  3  4  5  6  7  8  9  10    
AND OR