$sql를 인덱스로 두고 결과를 배열에 저장 후 리턴

$sql를 인덱스로 두고 결과를 배열에 저장 후 리턴

QA

$sql를 인덱스로 두고 결과를 배열에 저장 후 리턴

본문

한 세션 안에서 $sql 문이 같으면 결과 값도 동일하다는 전제 하에서 아래와 같은 함수를 생각해봤는데요.

아주 원시적인 방식이라 문제점이 없을지 고민스럽네요.

혹시 이런 방식을 도입해서 써보신 분이 있으신지 문제점은 없었는지 어쭙고 싶습니다.

테스트를 해보니 반복적인 쿼리의 경우 3000번을 돌리면 4.5초가 0.0014초로 줄어들긴 했습니다만..

전역적으로 적용을 시켜도 될런지 계속 고민스럽네요.

 


// $db는 PDO 입니다.
function sql_fetch($sql, $link = null): ?array
{
    global $db, $cz;
 
    if ($link === null) {
        $link = $db;
    }
 
    if (isset($cz['db']) && $cz['db'] === $link && isset($cz[$sql])) {
        return $cz[$sql];
    }
 
    $rst = sql_query($sql, $link);
    if (get_class($rst) === 'PDOException') {
        return (array)$rst;
    }
 
    $row = $rst->fetch(PDO::FETCH_ASSOC);
    
    $cz['db'] = $link;
    $cz[$sql] = $row;
 
    return (array)$row;
}

이 질문에 댓글 쓰기 :

답변 2

와우... 멋지네요.

저장된 케쉬를 갱신해야 할 일이 많을테니

flag를 하나 더 추가하는것도 좋겠네요

답변을 작성하시기 전에 로그인 해주세요.
전체 125,894 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT