포인트 내역 합계 slow query 코드 개선 조언 요청 건
본문
안녕하세요.
사이트 속도가 느려, slow query 를 분석 중입니다.
아래 query 가 slow query 에 있어 소스 위치를 확인해봤습니다.
select sum(po_point) as sum_po_point from $g5_point where mb_id = '아이디';
아래 코드를 개선하고자 하는데, 조언 좀 부탁드립니다.
---------- common.lib.php 에서 '포인트 내역 합계' 를 구하는 함수에서 실행되는 쿼리인데요.
#common.lib.php
// 포인트 내역 합계
function get_point_sum($mb_id)
{
global $g5, $config;
if($config['cf_point_term'] > 0) {
// 소멸포인트가 있으면 내역 추가
$expire_point = get_expire_point($mb_id);
if($expire_point > 0) {
$mb = get_member($mb_id, 'mb_point');
$content = '포인트 소멸';
$rel_table = '@expire';
$rel_id = $mb_id;
$rel_action = 'expire'.'-'.uniqid('');
$point = $expire_point * (-1);
$po_mb_point = $mb['mb_point'] + $point;
$po_expire_date = G5_TIME_YMD;
$po_expired = 1;
$sql = " insert into {$g5['point_table']}
set mb_id = '$mb_id',
po_datetime = '".G5_TIME_YMDHIS."',
po_content = '".addslashes($content)."',
po_point = '$point',
po_use_point = '0',
po_mb_point = '$po_mb_point',
po_expired = '$po_expired',
po_expire_date = '$po_expire_date',
po_rel_table = '$rel_table',
po_rel_id = '$rel_id',
po_rel_action = '$rel_action' ";
sql_query($sql);
// 포인트를 사용한 경우 포인트 내역에 사용금액 기록
if($point < 0) {
insert_use_point($mb_id, $point);
}
}
// 유효기간이 있을 때 기간이 지난 포인트 expired 체크
$sql = " update {$g5['point_table']}
set po_expired = '1'
where mb_id = '$mb_id'
and po_expired <> '1'
and po_expire_date <> '9999-12-31'
and po_expire_date < '".G5_TIME_YMD."' ";
sql_query($sql);
}
// 포인트합
$sql = " select sum(po_point) as sum_po_point
from {$g5['point_table']}
where mb_id = '$mb_id' ";
$row = sql_fetch($sql);
return $row['sum_po_point'];
}
답변 2
윗 부분은 로그인할때 한번 호출 되는 부분이라 사이트가 느려지는 원인으로 작용할는지 의문입니다
포인트 테이블 레코드수가 너무 많다면 G4의 adm/point_clear.php를 이용해서 포인트 정리를 한번 해주면
레코드 수가 팍 줄어들 것입니다
$sql = " select po_mb_point as sum_po_point
from {$g5['point_table']}
where mb_id = '{$mb_id}'
order by po_id desc
limit 1 ";
답변을 작성하시기 전에 로그인 해주세요.