Skip to content

효율적으로 디비 쿼리수 줄이기 Tip

Tip 조회 수 8013 추천 수 0 2012.01.16 20:17:21
커뮤니티 사이트를 만들어서 운영하다 보면 회원포인트를 뽑아서 등급을 보여준다던지 게시판 리스트나 이런곳에서 등급아이콘을 보여준다던지 하는 경우가 많습니다. 
회원에 대한 리스트가 많을수록 그만큼 디비에 대한 쿼리수가 늘수 밖에 없는데요 

이런때 간단한 방법으로 효율적으로 쿼리수를 줄이는 방법입니다. 

lib안에 common.lib.php라는 파일이 있습니다. 
여기에 아주 자주 사용되는 get_member라는 함수가 있습니다. 


// 회원 정보를 얻는다. 
function 
get_member($mb_id, $fields='*') 
{ 
    global $g4; 
    return 
sql_fetch(" select $fields from $g4[member_table] where mb_id = TRIM('$mb_id') 
"); 
} 



요렇게 되어있는데요. 이것을 아래와 같이 수정합니다. 

// 회원 정보를 얻는다. 
function 
get_member($mb_id, $fields='*') 
{ 
    global $g4; 
    $mb_id = 
trim($mb_id); 
    $fields = trim($fields); 
    if (empty($mb_id)) return 
Array(); 
    if (empty($fields)) $fields = '*'; 
    if ($fields == '*' 
&& !empty($g4['member_info'][$mb_id]['mb_id'])) { 
      $return = 
$g4['member_info'][$mb_id]; 
    } 
    else { 
      $return = 
sql_fetch(" select $fields from $g4[member_table] where mb_id = '$mb_id' "); 

      if ($fields == '*') $g4['member_info'][$mb_id] = $return; 
    } 

    if (isset($return['mb_point'])) $g4['member_info'][$mb_id]['mb_point'] = 
$return['mb_point']; 
    return $return; 
} 



이렇게 하는 이유는 같은 회원정보를 반복해서 가져오지 않기 위해서 입니다. 
예를 들어 게시판 리스트 같은 경우 모두 다른 글작성자일수도 있지만 같은 글작성자가 반복적으로 있을경우에 그만큼 회원정보를 가져오는 쿼리수를 줄일수 있게 됩니다. 

그리고 아주 자주 쓰는 회원 포인트정보를 가져오는 함수를 하나더 만듭니다. 


//회원정보중 포인트 정보만 얻는다 
function 
get_member_point($mb_id) 
{ 
    global $g4; 
    $mb_id = 
trim($mb_id); 
    if (empty($mb_id)) return 0; 
    if 
(isset($g4['member_info'][$mb_id]['mb_point'])) { 
      $return = 
$g4['member_info'][$mb_id]['mb_point']; 
    } 
    else { 
      $data 
= sql_fetch(" select mb_point from $g4[member_table] where mb_id = '$mb_id' "); 

      $return = $data['mb_point']; 
      
$g4['member_info'][$mb_id]['mb_point'] = $return; 
    } 
    return 
$return; 
} 



이런식으로 회원정보중 포인트만 가져오는 것도 위와 같은 식으로 하면 많이 효율적일 것입니다. 

게시판 정보를 가져오는 것이라던지, 그룹정보를 가져오는 것이라던지, 반복이 많은 것들은 같은 방법으로 처리하면 많은 효율을 가져올수 있습니다.
profile

일요일은 짜빠게뤼~ 먹는날~^^

엮인글 :
http://adminplay.com/74399/ad1/trackback
List of Articles
번호 제목 글쓴이 날짜 조회 수
47 Tip 그누보드의 visit 문제 file ADMINPLAY 2012-01-16 6789
46 [긴급]그누보드 4.34.05 패치 ADMINPLAY 2012-01-16 5358
45 Tip 그누보드 팁. $wr_id 값을 사용하지 않습니다_라고 뜰때 해결방법 1 (그누보드 관련 게시판이 있다면....) ADMINPLAY 2012-01-16 11362
44 Tip 그누보드 팁. $wr_id 값을 사용하지 않습니다_라고 뜰때 해결방법 2 (그누보드 관련 게시판이 있다면....) ADMINPLAY 2012-01-16 5838
43 Tip 그누보드 팁. $wr_id 값을 사용하지 않습니다_라고 뜰때 해결방법 3 (그누보드 관련 게시판이 있다면....) ADMINPLAY 2012-01-16 6584
42 Tip 그누보드 메타태그(description, keywords) 설정 file [1] ADMINPLAY 2012-01-16 15397
41 Tip 중규모 커뮤니티 속도저하방지를 위한 튜닝 [그누보드 관련] ADMINPLAY 2012-01-16 8785
40 플러그인 그누보드 내글 모니터 (쿠키 및 구글 스타일 변환) file ADMINPLAY 2012-01-16 13178
39 플러그인 게시판의 정렬을 이용한 최신글 file ADMINPLAY 2012-01-16 28515
38 플러그인 게시물 순위를 이전과 비교해서 등수 출력 file ADMINPLAY 2012-01-16 11496
37 플러그인 코멘트 Ajax 처리 - 아직도 코멘트(댓글)쓰고 전체 페이지 로딩되나요? ADMINPLAY 2012-01-16 16636
» Tip 효율적으로 디비 쿼리수 줄이기 Tip ADMINPLAY 2012-01-16 8013
35 플러그인 네이버 스타일 아웃로그인 스킨(?) file ADMINPLAY 2012-01-16 11837
34 Tip 투표(설문) 새창 띄우기 ADMINPLAY 2012-01-16 8826
33 Tip 포인트 반복 차감 기간 제한 ADMINPLAY 2012-01-16 8047
32 Tip 공지사항 리스트에 이중 출력 안되도록. ADMINPLAY 2012-01-16 10403
31 Tip 오늘의 주인공 onfocus="this.blur();"와 a:visited를 소개합니다. ADMINPLAY 2012-01-16 9991
30 Tip 그누보드 회원 포인트 일괄삭제 하기 (mb_point + 포인트 내역) ADMINPLAY 2012-01-16 9585
29 최적화 그누보드에서 효율적으로 디비에 쿼리수 줄이기 ADMINPLAY 2012-01-16 9004
28 Tip 출석시 과거 특정날짜 자동출석 인정하는 방법 - 미션출석부 l2zeo 2012-03-12 9322

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234