MySQL 에 대한 PHP 버퍼 조회 와 버퍼 없 는 조 회 를 비교 합 니 다.

버퍼 조회 와 버퍼 없 는 조회
MySQL 의 클 라 이언 트 는 두 가지 유형의 조회 가 있 습 니 다.
버퍼 조회:조회 결 과 를 받 고 클 라 이언 트 의 캐 시 에 저장 합 니 다.그 다음 에 줄 기록 을 가 져 오 라 는 요청 은 로 컬 에서 만 가 져 옵 니 다.
(1)장점:결과 에서'현재 줄'의 지침 을 자 유 롭 게 이동 할 수 있 습 니 다.결 과 는 클 라 이언 트 가 존재 하기 때 문 입 니 다.
(2)단점:이 결과 집합 을 저장 하기 위해 서 는 추가 메모리 가 필요 하 며,많은 메모리 가 필요 합 니 다.또한,phop 에서 조 회 를 실행 하 는 함 수 는 모든 결 과 를 받 을 때 까지 값 을 되 돌려 줍 니 다.
버퍼 없 는 조회:엄격 한 순서 로 조회 결 과 를 방문 하 는 것 을 제한 합 니 다.그러나 그 는 결과 집합 전 체 를 저장 하기 위해 별도의 메모리 가 필요 없다.MySQL 서버 가 값 을 되 돌려 주기 시작 할 때 데이터 줄 을 가 져 오 거나 표시 할 수 있 습 니 다.버퍼 없 는 결과 집합 을 사용 할 때 my sql 을 사용 해 야 합 니 다.fetch_row 함수 가 데이터 줄 을 가 져 오 거나 서버 에 다른 명령 을 보 내기 전에 my sqlfree_result 함수 가 결과 집합 을 닫 습 니 다.
어떤 종류의 조회 가 좋 습 니까?가장 좋 은 근 거 는 구체 적 인 상황 에 따라 정 해 집 니 다.버퍼 없 는 조 회 는 결과 집합 이 클 때 대량의 임시 메모 리 를 절약 할 수 있 습 니 다.또한 조 회 는 정렬 이 필요 없 을 때 phop 은 MySQL 데이터 베 이 스 를 실제로 처리 할 때 첫 번 째 데이터 줄 을 얻 을 수 있 습 니 다.
캐 시 조 회 는 찾기 쉬 워 서 전면적 인 찾기 속 도 를 제공 할 수 있다.모든 단독 조회 가 빨리 읽 히 기 때문에 my sql 은 결과 집합 을 빠르게 가 져 와 메모리 에 저장 합 니 다.PHP 코드 를 처리 할 때 검색 을 사용 할 수 있 는 것 이 아 닙 니 다.
또 다른 버퍼 없 는 조회 의 제한 은 모든 데이터 줄 에서 읽 히 거나 결과 집합 에서 my sql 을 사용 하 는 것 입 니 다.free_result 가 풀 리 기 전에 서버 에 명령 을 보 낼 수 없습니다.
PHP+MySQL 버퍼 조회 와 버퍼 없 는 조회
PHP MySQL 조회(mysql,pdomysql)기본적으로 버퍼 모드 를 사용 합 니 다.
즉,검색 결 과 는 MySQL 에서 PHP 프로 세 스 메모리 로 한꺼번에 전 송 됩 니 다.
이 때 결과 집합의 줄 수 와 이동 결과 집합의 지침 을 통계 할 수 있다.
버퍼 모드 에서 결과 집합 이 크 면 PHP 프로 세 스 도 많은 메모 리 를 사용 합 니 다.
결과 집 이 unset 이나 free 가 될 때 까지.
store_result 는 버퍼 모드 에 사 용 됩 니 다.모든 결 과 는 PHP 프로 세 스에 한꺼번에 저 장 됩 니 다.

mysqli::query MYSQLI_STORE_RESULT 
mysqli::store_result 
mysqli_stmt::store_result 
PHP 의 MySQL 데이터베이스 구동 바 텀 이 libmy sqlclient 라면 memorylimit 는 결과 집합 이 사용 하 는 메모리 까지 통계 할 수 없습니다.
결과 집합 이 PHP 변수 에 할당 되 어 있 지 않 은 경우,바 텀 에서 my sqlnd 를 구동 으로 사용 할 때 통계 할 수 있 습 니 다(PHP 는 5.4 부터 기본 값 으로 my sqlnd 를 사용 합 니 다).
버퍼 없 이 실 행 된 검색 은 resource 자원 참조 로 되 돌아 갑 니 다.MySQL 에 있 는 검색 결 과 는 PHP 가 가 져 올 때 까지 기 다 립 니 다.
버퍼 없 이 PHP 프로 세 스 가 사용 하 는 메모리 가 적 지만 MySQL 서버 의 부하 가 증가 합 니 다.
PHP 에서 모든 결 과 를 되 찾기 전에 현재 데이터베이스 연결 에서 다른 조회 요청 을 보 낼 수 없습니다.
use_result 는 버퍼 없 는 검색 을 표시 합 니 다.

mysqli::query MYSQLI_USE_RESULT 
mysqli::use_result 
요약:
결과 집합 이 크 지 않 거나 모든 줄 을 읽 기 전에 결과 집합 줄 수 를 가 져 올 때 버퍼 조회(기본 값)를 사용 합 니 다.
결과 집합 이 많 을 때,PHP 프로 세 스 가 대량의 메모 리 를 차지 하지 않도록 버퍼 없 는 조 회 를 사용 합 니 다.

$rs = $mysqli->query("SELECT * FROM City", MYSQLI_USE_RESULT); 
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); 
$rs = $pdo->query("SELECT * FROM City"); 
기본 상황 에서 my sqlstmt 의 SELECT 조회 결 과 는 MySQL 서버 에 남아 fetch 방법 으로 기록 을 하나씩 PHP 프로그램 으로 되 찾 을 때 까지 기다 릴 것 입 니 다.이렇게 하면 성능 이 떨 어 지지 만 메모 리 를 절약 할 수 있 습 니 다.
모든 기록 을 처리 해 야 한다 면 my sql 을 호출 할 수 있 습 니 다.stmt::store_result,모든 결 과 를 한꺼번에 PHP 프로그램 에 전송 합 니 다.
이렇게 하면 더욱 효율 적 이 고 MySQL 서버 의 부담 을 줄 일 수 있 습 니 다.메모리 사용량 이 많 지만.
SELECT 문 구 를 가 져 와 몇 개의 기록 을 찾 았 다 면 my sqli 를 사용 할 수 있 습 니 다.stmt::$num_rows 가 져 오기.
이 속성 은 my sqli 를 미리 실행 한 적 이 있 습 니 다.stmt::store_result 방법 은 모든 검색 결 과 를 PHP 프로그램 에 전송 한 상태 에서 만 사용 할 수 있 습 니 다.
대비 mysqlresult::$num_rows 는 이 제한 이 없 지 않 습 니 다.
mysql 로stmt::free_result 닫 기 mysqlstmt::store_result:

$stmt->store_result(); 
echo $stmt->num_rows; 
$stmt->free_result(); 

mysqli_stmt::store_result 는 my sqlstmt::fetch 가 더 효율 적 이지 만 my sql 를 사용 해 야 합 니 다.stmt::free_result 현식 종료.
my sql 사용 가능stmt::get_result 결과 집합 대상$result,그리고 my sqlresult::fetch_all 쿼 리 배열$results 가 져 오기:

$result = $stmt->get_result(); 
$results = $result->fetch_all(MYSQLI_ASSOC); 

관련 매개 변 수 를 정리 합 니 다:

mysqli::query//  SQL,    mysqli_result(SELECT,SHOW,DESCRIBE  )   TRUE(    ),    FALSE. mysqli::close  .
mysqli::prepare//   SQL,    statement  ,    FALSE.
mysqli_stmt::execute//  SQL. mysqli_stmt::close  .
mysqli_stmt::store_result//        (SELECT,SHOW,DESCRIBE,EXPLAIN) PHP,  . mysqli_stmt::free_result  .
mysqli_stmt::bind_result// prepare execute            ,   mysqli_stmt::fetch           .
mysqli_stmt::fetch//          ,   mysqli_stmt::bind_result     .
mysqli_stmt::get_result//      ,    mysqli_result::fetch_all         .mysqlnd   .
mysqli_result::fetch_all//         (MYSQLI_NUM(  ),MYSQLI_ASSOC,MYSQLI_BOTH), mysqli_result::close  .mysqlnd   .
mysqli_result::fetch_array//          ,                .
mysqli_result::fetch_assoc//          ,          .
mysqli_result::fetch_row//          ,          .

좋은 웹페이지 즐겨찾기