이전 목록 다음
채택완료

포인트 내역 합계 slow query 코드 개선 조언 요청 건

안녕하세요.

사이트 속도가 느려, slow query 를 분석 중입니다.  

아래 query 가 slow query 에 있어 소스 위치를 확인해봤습니다.

Copy
select sum(po_point) as sum_po_point from $g5_point where mb_id = '아이디';

아래 코드를 개선하고자 하는데, 조언 좀 부탁드립니다. 

---------- common.lib.php 에서 '포인트 내역 합계' 를 구하는 함수에서 실행되는 쿼리인데요. 

Copy
#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개

채택된 답변
+20 포인트

윗 부분은 로그인할때 한번 호출 되는 부분이라 사이트가 느려지는 원인으로 작용할는지 의문입니다

포인트 테이블 레코드수가 너무 많다면 G4의 adm/point_clear.php를 이용해서 포인트 정리를 한번 해주면

레코드 수가 팍 줄어들 것입니다

2024-04-17 (수) 19:34:30
Copy
$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 ";

답변을 작성하려면 로그인이 필요합니다.