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

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

QA

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

답변 2

본문

안녕하세요.

 

사이트 속도가 느려, 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 ";
답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 13
© SIRSOFT
현재 페이지 제일 처음으로