2013-08-19 2 views
0

원격 데이터베이스에서 많은 양의 데이터를 가져와야합니다. 생각이SQL - 데이터가 전송 될 때

1

while(mysql_fetch_array()...){ 
    //do something 
} 

3 다음 블록을 얻기 차단

SELECT * FROM TABLE LIMIT 1,10000 

이 프로세스를 datas의 첫 번째 블록을 선택처럼 매김 일종의을 할 것입니다

등 에.

10000이 내 시스템에 허용되는 차원이라고 가정 할 때 30000 개의 레코드가 있다고 가정 해 봅시다. 원격 시스템에 3 번의 호출을 수행합니다.

내 질문은 : 선택을 실행하면 결과 집합이 전송되고 일부 로컬 부분에 결과가 저장되거나 결과 집합이 원격 시스템에 저장되고 모든 가져 오기에서 하나씩 오는 레코드가 저장됩니다. ? 왜냐하면 진짜 시나리오는 두 번째입니다. 3 번의 전화를하지 않고 30000 번 전화를하고, 내가 원하는 것이 아닙니다.

내가 도움

안녕

+1

귀하의 DBMS (MySql?)가 모든 것을 정렬합니다. 왜 10,000을 요구하는거야, 큰 페이지가되어야 해! –

답변

0

첫째, 매우 MySQLi 또는 PDO 대신 사용되지 않는 mysql_* 기능 는 MySQL과 mysqli 확장을 기본적으로 http://php.net/manual/en/mysqlinfo.api.choosing.php

을 활용 권장, 전체 결과 집합은 쿼리를 실행할 때 PHP의 메모리에로드되지만, 필요한 경우 또는 원하는 경우 행을 검색 할 때 결과를로드하도록이 옵션을 변경할 수 있습니다.

  • MySQL의
  • mysqli
    • mysqli::query()
      $resultmode 요청대로
    • mysql_unbuffered_query() 만 데이터베이스로부터 데이터를 검색 PHP의 메모리에 설정 한 전체 결과를 버퍼링 매개 변수 dete rmines 동작.
      기본값 인 MYSQLI_STORE_RESULT을 사용하면 전체 결과 집합이 PHP의 메모리로 전송되지만 MYSQLI_USE_RESULT을 사용하면 요청 된대로 행을 검색하게됩니다. PDO::fetch()과 결과를 쿼리를 실행하는 PDO::query() 또는 PDO::prepare()를 사용하여 검색 할 때 기본적으로

PDO는 필요에 따라 데이터를로드합니다.
, 당신은 PDO::fetchALL() 권장하지만 또한 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 상수를 사용할 수 있습니다 PDO::fetchAll()
준비된 문을 사용할 수있는 PHP 배열로 결과 집합에서 모든 데이터를 검색합니다.


기본 동작을 유지하고 변경 사항을 벤치마킹하여 실제로 긍정적 인 결과가 있는지 확인하는 것이 가장 좋습니다. 결과를 개별적으로 전송하는 오버 헤드가 적고 최적의 방법을 결정하는 데있어 다른 요소가 더 중요 할 수 있습니다.

+0

고마워요! 그리고 anyother 덕분에 내 질문에 답합니다. – user2540463

0

주셔서 감사합니다 당신은 3 호출하지 30.000을 수행하는 것, 내가 설명 바랍니다. 그건 확실합니다.

각각 10.000 개의 결과 일괄 처리가 서버에서 렌더링됩니다 (3 가지 쿼리 각각 수행). MySQL이 이미 반환 한 데이터 집합을 반복합니다 (30,000 개의 쿼리가없는 이유입니다). $row 사용하여 초기 쿼리에서 이미 가져온 데이터와 관련이있다함으로써 당신은 while 루프 내에서 할

$res = mysql_query(...); 

while ($row = mysql_fetch_array($res)) { 
    //do something with $row 
} 

아무것도 :이 같은 뭔가있을 것입니다 가정한다

.

희망 사항. 질문에 대한 답변입니다.

0

설명서에 따라 here 모든 데이터가 서버로 가져온 다음이를 처리합니다. 페이지에서

는 : 또한 Returns an array of strings that corresponds to the fetched row, or FALSE if there are no more rows.

당신이 제안 다른 뭔가를 사용할 수 있도록이되지 않습니다 솔기.

관련 문제