2011-04-22 2 views
3

use_result, store_result과의 MyISAM 테이블 잠금 (같은 thisthis, 또는 this 일) use_result() (언 버퍼 쿼리)와 store_result() (버퍼 쿼리)의 차이에 대해도 알고 모든 결과가 클라이언트에 보내질 때까지 MySQL은 데이터 (전체 테이블의 MyISAM의 경우)에 대한 잠금을 유지합니다.PHP/MySQL을 (내가) 내가 다양한 소스를 읽은

내가 이해하지 못하는 이유는 (버퍼링되지 않은) 쿼리에서 MySQL은 store_result() (버퍼링 된) 쿼리보다 더 오랜 시간 동안 잠금을 유지합니다. use_result()을 사용하고 PHP 배열에 버퍼링하는 것보다 store_result()을 사용하는 것이 왜 다른가요?

답변

2

store_result()을 사용하는 경우 mysql 드라이버 (PHP보다 낮은 레벨에서 작성)는 서버에서 클라이언트로 데이터를 전송하고 잠금을 해제합니다.

use_result()을 사용하고 배열에서 버퍼링 할 때 PHP 루프를 만들어야하고, PHP는 루프가 느린 인터프리터이기 때문에 모든 행 페치간에 지연이 있습니다.

이 지연 측정 값을보고하기 위해 걸리는 시간의 차이는, PHP 코드는 C 코드 후 느린

for (i = 0; i < 100000; i++) {} 

php 사이 일반적 c

실행하고 PHP 확장 내부 기능은 C 코드로 작성되었으므로 확장 또는 내부 함수를 사용하면 PHP 코드에서 동일한 내용의 알고리즘을 작성하는 것보다 항상 빠릅니다.