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

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

출처 :
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. 29
번호 분류 제목 작성자 등록일 조회수
29 php [php] mssql ms-sql 한글 변환 끄적임.. 정리 rootman 03-29 4842
28 php [php] highlight 함수 rootman 04-01 6112
27 php [php] 최근 게시물보기 속도 빠르게 만들기 rootman 02-28 7402
26 php [php] 암호화 알고리즘 종류 루트맨 03-12 7241
25 php [php] 문자열 관련 함수 rootman 01-19 4836
24 php [php] URL 함수 목록 rootman 12-21 6633
23 php [php] Fatal error: Allowed memory size 에러 발생 시 rootman 11-25 6122
22 php [php] utf8인지 아닌지 체크하는 함수 rootman 10-21 6490
21 php [함수] 배열 함수 정리 rootman 08-22 6932
20 php [php] 1년전 날짜 구하기 rootman 07-28 9113
19 php [php] YYYY년MM월DD일→YYYYMMDD 정리판 rootman 06-17 8138
18 php [php] 제로보드 해킹 하기 rootman 03-02 19067
17 php [php] (함수) mysql_escape_string rootman 01-13 7485
16 php [php] (보안) 자동공격 봇 막기.2 rootman 01-06 6905
15 php [함수] include 와 require의 차이점 그리고 _once사용시 주의할… rootman 01-06 6417
 1  2  
AND OR