테스트 사이트 - 개발 중인 베타 버전입니다

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

gilynh 8년 전 조회 4,625

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

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

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

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

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

 

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

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

답변 2개

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

g
gilynh
8년 전
캐시를 쓰는건 아닙니다만, 전역변수가 유효하는 범위 안에서 만입니다.
한 세션 안에서는 데이터베이스 변화에 대응 하지 않아도 되는 경우를 전제로 깝니다.

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

와우... 멋지네요.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

g
gilynh
8년 전
원시적인 방법이라 멋진거 같진 않은데..^^;;

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

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

로그인