그누보드에서 효율적으로 디비에 대한 쿼리수 줄이기 정보
그누보드에서 효율적으로 디비에 대한 쿼리수 줄이기
관련링크
본문
커뮤니티 사이트를 만들어서 운영하다 보면
회원포인트를 뽑아서 등급을 보여준다던지
게시판 리스트나 이런곳에서 등급아이콘을 보여준다던지 하는 경우가 많습니다.
회원에 대한 리스트가 많을수록 그만큼 디비에 대한 쿼리수가 늘수 밖에 없는데요
이런때
간단한 방법으로 효율적으로 쿼리수를 줄이는 방법입니다.
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;
}
이런식으로 회원정보중 포인트만 가져오는 것도 위와 같은 식으로 하면
많이 효율적일 것입니다.
게시판 정보를 가져오는 것이라던지
그룹정보를 가져오는 것이라던지
반복이 많은 것들은 같은 방법으로 처리하면
많은 효율을 가져올수 있습니다.
의견들 많이 달아주세요.
음 링크를 반드시 올려야 한다고 해서 그냥 그누보드 url올립니다.
추가 : 한줄 빠져서 추가해서 다시 수정했습니다
회원포인트를 뽑아서 등급을 보여준다던지
게시판 리스트나 이런곳에서 등급아이콘을 보여준다던지 하는 경우가 많습니다.
회원에 대한 리스트가 많을수록 그만큼 디비에 대한 쿼리수가 늘수 밖에 없는데요
이런때
간단한 방법으로 효율적으로 쿼리수를 줄이는 방법입니다.
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;
}
이런식으로 회원정보중 포인트만 가져오는 것도 위와 같은 식으로 하면
많이 효율적일 것입니다.
게시판 정보를 가져오는 것이라던지
그룹정보를 가져오는 것이라던지
반복이 많은 것들은 같은 방법으로 처리하면
많은 효율을 가져올수 있습니다.
의견들 많이 달아주세요.
음 링크를 반드시 올려야 한다고 해서 그냥 그누보드 url올립니다.
추가 : 한줄 빠져서 추가해서 다시 수정했습니다
추천
14
14
댓글 51개
멋진팁입니다.
수고하셨습니다.
수고하셨습니다.

감사합니다.
한줄 빠져서 다시 수정했습니다.
참고하여 주세요,
한줄 빠져서 다시 수정했습니다.
참고하여 주세요,

별로 관심이 없는 부분인가요?
아무래도 사용자가 많지 않은 개인홈페이지의 경우 큰 매리트가 없을듯한데...
앞으로를 위해서... 이런 부분의 튜닝이 필요하다고 봅니다.
관리자님께서도 꼭 참고를 하셔야 할 자료인듯 합니다 ^^
앞으로를 위해서... 이런 부분의 튜닝이 필요하다고 봅니다.
관리자님께서도 꼭 참고를 하셔야 할 자료인듯 합니다 ^^

고맙습니다. 위안이 됩니다.
전 글을 한개쓰면
떠나지 못해요. 누가 얼마나 읽나 보나 관심을 보이나......
좀 병이죠?
전 글을 한개쓰면
떠나지 못해요. 누가 얼마나 읽나 보나 관심을 보이나......
좀 병이죠?

좋은 팁 감사합니다.....
>>떠나지 못해요. 누가 얼마나 읽나 보나 관심을 보이나......
큰일 나셨네요...^^ 아직 출근 전이신 분들이 많은데 언제 출근하시려는지....^^
>>떠나지 못해요. 누가 얼마나 읽나 보나 관심을 보이나......
큰일 나셨네요...^^ 아직 출근 전이신 분들이 많은데 언제 출근하시려는지....^^
아무래도 시간과 열정을 투자한 작품이라 그만큼 기대가 크기 때문일듯합니다.
저도 간혹 글 올리고 줄기차게 기다리곤 합니다.ㅎㅎ
이러다간 병자들의 대화가 될듯 하군요.ㅋㅋㅋ
저도 간혹 글 올리고 줄기차게 기다리곤 합니다.ㅎㅎ
이러다간 병자들의 대화가 될듯 하군요.ㅋㅋㅋ

그나저나 한양 나들이 계획이 잡히지 못해 사뭇 죄송할 따름입니다...ㅠ.ㅠ
뭣이 죄송???
미천한것이 어떻게 천상에서 재회를 .....ㅠ.ㅠ
미천한것이 어떻게 천상에서 재회를 .....ㅠ.ㅠ

은근히 안오기를 기대하시는 분위기가 느껴지는 것은 왜일까요....?
기다리다 지쳐 잊은지 오래라는.............
기다리느니 천상으로 가는것이 빠를듯....
기다리느니 천상으로 가는것이 빠를듯....

중독입니다......오늘도 좀 자제를 해보려고 눈팅하다가 유창화님이 못 가신다 하시기에...ㅠ.ㅠ
중독입니다......오늘도 좀 자제를 해보려고 눈팅하다가 유창화님이 못 가신다 하시기에...ㅠ.ㅠ 2

ㅎㅎ
이전에 저녁 자리에서 루트님이 말씀 하셨던 유창화님 이시네요.
항상 고급팁을 올려 주셔서 잘 보고 있습니다. 유저들이 무관심 하다고
거시기(?) 하시지 마시고 좋은 팁 많이 올려 주세요.^^b
항상 고급팁을 올려 주셔서 잘 보고 있습니다. 유저들이 무관심 하다고
거시기(?) 하시지 마시고 좋은 팁 많이 올려 주세요.^^b

그런일이 있었군요
좋게 봐주셔서 감사합니다
좋게 봐주셔서 감사합니다

두분 감사합니다
감사합니다^^ 덕분에 사이트 load를 많이 줄일 수 있을거 같아요^^

좋게 봐주셔서 고맙습니다
^_____________^...
적용했더니 사이트 속도가 엄청나게 빨라졌어요.
포인트 정보는 가져오지 않더라도 목록에 있는
퍼스나콘 등의 정보를 많이 가져오는데 그것의 영향이 컸던거 같아요.
관리자님... 다음 버젼에는 이 팁이 꼭~!!! 반영되었으면 하네요.
* 추천도 한방 날렸습니다. ㅋㅋ
적용했더니 사이트 속도가 엄청나게 빨라졌어요.
포인트 정보는 가져오지 않더라도 목록에 있는
퍼스나콘 등의 정보를 많이 가져오는데 그것의 영향이 컸던거 같아요.
관리자님... 다음 버젼에는 이 팁이 꼭~!!! 반영되었으면 하네요.
* 추천도 한방 날렸습니다. ㅋㅋ
감삽니다.
다 떨어졌어요~*
다 떨어졌어요~*

ㅎㅎ
공개해주신 팁 효용성이 커보입니다....
다만 하드코딩으로 작성되어 있는 여기저기 산재해 있는 쿼리들을 불러내고자 하는 필드만으로 한정하여 커스터마이징하자면 꽤나 귀차니즘의 압박이...
그냥 common.lib.php만 고쳐서 사용해야 겠네요...
유용한 팁 감사드립니다...
다만 하드코딩으로 작성되어 있는 여기저기 산재해 있는 쿼리들을 불러내고자 하는 필드만으로 한정하여 커스터마이징하자면 꽤나 귀차니즘의 압박이...
그냥 common.lib.php만 고쳐서 사용해야 겠네요...
유용한 팁 감사드립니다...

감사합니다.
아 이거 속도가 빨라진다니 흥분되는군요. 당장 적용에 들어갑니다. 속도관련된 튜닝이라면 그 어떤 팁보다도 환영입니다. 감사합니다.
전 아직 초보에 가깝지만 좋은 팁인건 알겠네요^^ 근데 아직까지 방문자가 많은 홈을 가져본적이 없어서..
아무튼 다음 그누버전에서는 꼭 넣어줘야할 팁인거 같습니다.
아무튼 다음 그누버전에서는 꼭 넣어줘야할 팁인거 같습니다.

감사합니다.^^
이팁이 차기 버전에서는 꼭 참고가 되었으면 하는 바램입니다.
이팁이 차기 버전에서는 꼭 참고가 되었으면 하는 바램입니다.

좋은 팁 감사합니다...^^
다음버전에 이 팁이 적용되기를 기대해 봅니다...^^
다음버전에 이 팁이 적용되기를 기대해 봅니다...^^

그누폐인님 지구인님 헐랭이님 날으는 사진님 감사합니다.
저도 꼭 적용해보겠습니다....조금이라도 빨라지면 많이 좋습니다...^^
감사합니다.
감사합니다.
좋은팁 똥꼬가 저리도록 감사드립니다.
저야.. 프로그램은 아예 모르지만 한 칼 하시는 분들의 댓글로 보아
분명 똥꼬가 저리다가 지칠 팁.. ( 팁이라 하기엔 너무 아까운 ) 임이 확실한 것 같습니다.
감사드립니다. 쪼옥~ -_-
저야.. 프로그램은 아예 모르지만 한 칼 하시는 분들의 댓글로 보아
분명 똥꼬가 저리다가 지칠 팁.. ( 팁이라 하기엔 너무 아까운 ) 임이 확실한 것 같습니다.
감사드립니다. 쪼옥~ -_-
감사합니다^^
스크랩 해두었다가 공부하겠습니다.
일전에 올려주신 외부파일 썸네일생성 관련팁에 빠져 즐거운(?)나날을 보내고 있답니다.
일반적으로 스킨에 적용하는 부분은 대부분 마쳤습니다.
//남은것은 썸네일 정리부분인데 생각보다 어렵네요^^ << ps, 대략 삽질로 해결했습니다.ㅎㅎ
오직 `열공`이 있을뿐입니다.ㅠㅠ
스크랩 해두었다가 공부하겠습니다.
일전에 올려주신 외부파일 썸네일생성 관련팁에 빠져 즐거운(?)나날을 보내고 있답니다.
일반적으로 스킨에 적용하는 부분은 대부분 마쳤습니다.
//남은것은 썸네일 정리부분인데 생각보다 어렵네요^^ << ps, 대략 삽질로 해결했습니다.ㅎㅎ
오직 `열공`이 있을뿐입니다.ㅠㅠ
좋은 팁 감사합니다

올려주신 코드는 잘 보았습니다.
코드를 약간 수정해 보았습니다.
// 회원 정보를 얻는다.
function get_member($mb_id, $fields='*')
{
global $g4;
$mb_id = trim($mb_id);
if (!$mb_id) return;
// 이미 저장해 놓은 배열을 넘김
if ($g4['member_info'][$mb_id]['mb_id'] == $mb_id &&
$g4['member_info'][$mb_id]['fields'] == $fields) {
return $g4['member_info'][$mb_id];
} else {
$row = sql_fetch(" select $fields from $g4[member_table] where mb_id = '$mb_id' ");
$g4['member_info'][$mb_id] = $row;
$g4['member_info'][$mb_id]['fields'] = $fields;
return $row;
}
}
지금 확인해 본 결과 게시판 리스트에서는 회원정보를 끌어오지 않고 있습니다.
활용 범위가 높은 코드임에는 틀림없습니다.
감사합니다.
코드를 약간 수정해 보았습니다.
// 회원 정보를 얻는다.
function get_member($mb_id, $fields='*')
{
global $g4;
$mb_id = trim($mb_id);
if (!$mb_id) return;
// 이미 저장해 놓은 배열을 넘김
if ($g4['member_info'][$mb_id]['mb_id'] == $mb_id &&
$g4['member_info'][$mb_id]['fields'] == $fields) {
return $g4['member_info'][$mb_id];
} else {
$row = sql_fetch(" select $fields from $g4[member_table] where mb_id = '$mb_id' ");
$g4['member_info'][$mb_id] = $row;
$g4['member_info'][$mb_id]['fields'] = $fields;
return $row;
}
}
지금 확인해 본 결과 게시판 리스트에서는 회원정보를 끌어오지 않고 있습니다.
활용 범위가 높은 코드임에는 틀림없습니다.
감사합니다.

관리자님께서 코멘트를 직접 주시고
영광입니다.
도움이 되면 좋겟습니다.
영광입니다.
도움이 되면 좋겟습니다.
감사합니다.
강추
감사합니다.
항상 멋진팁을 올려주시네요^^
항상 멋진팁을 올려주시네요^^

네 세분 감사합니다
저도 방금 관리자님께서 올려주신 소스로 적용해봤는데,
사이트가 전체적으로 빨라진 것 같습니다..ㅎㅎ
감사합니다^^
사이트가 전체적으로 빨라진 것 같습니다..ㅎㅎ
감사합니다^^

감사합니다~^^:
이런팁은 정말 환영입니다.
역시 유창화님이십니다.
역시 유창화님이십니다.
유용합니다..감사합니다
정말정말 감사합니다.
속도 차이가 확연하군요!!
속도 차이가 확연하군요!!
그누보드에서 효율적으로 디비에 대한 쿼리수 줄이기
감사합니다 ^^
이런팁이 있었군요.^^
아주 유용합니다. 감사합니다~~^&~
아주 유용합니다. 감사합니다~~^&~
감사합니다.

설치때마다 적용
감사합니다!

그누보드에서 효율적으로 디비에 대한 쿼리수 줄이기