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// , .
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.