title: How to speedup data reaging from oracle database by PHP
body: <p>How can I speed up generating array of 70k records from oracle database?
  This code need about 10 minutes to generate array of data, to much :(
  Everything is fine when i delete the second while but i need the info from this query ...</p>
  <p>I have three tables, one of them has main ID of product and other information, second is concatenation table and third is table which has additional product information. This is a one-to-many relationship.</p>
  <p>Any ideas?</p>
  <pre><code>$query = oci_parse($connection, '
      SELECT PZG_MATERIALZASOBU.ID_PZG_MATERIALZASOBU, 
      PZG_SPOSOBPOZYSKANIA.NAZWA AS SPOSOBPOZYSKANIA,
      DATAPRZYJECIA,
      PZG_MATERIALZASOBU.IDENTYFIKATOR AS IDENTYFIKATOR,
      PZG_OSOBAINSTYTUCJA.NAZWA AS TWORCA,
      PZG_ZGLOSZENIE.IDENTYFIKATOR AS IDZGLOSZENIA,
      PZG_REJESTRPRAC.OZNACZENIEUMOWY AS OZNUMOWY,
      OZNUMOWYINNYORGAN,
      PZG_NAZWAMAT.NAZWA AS NAZWAMAT,
      PZG_POSTAC.NAZWA AS POSTAC,
      PZG_NOSNIKNIEELEKTRONICZNY.NAZWA AS NOSNIK,
      PZG_FORMATDANYCH.NAZWA AS FORMATDANYCH,
      PZG_RODZAJDOSTEPU.NAZWA AS RODZAJDOSTEPU,
      PZG_MATERIALZASOBU.OPIS,
      PZG_JEZYK.NAZWA AS JEZYK,
      PZG_TYPMATERIALU.NAZWA AS TYPMATERIALU,
      PZG_DATAOKRES.DATAOKRES AS DATAOKRES,
      OZNMATERIALUZASOBU,
      IDNADPRZEZORGAN,
      PZG_SKALA.NAZWA AS SKALA,
      PZG_UKLADODNIESIENIA.NAZWA AS UKLADODNIESIENIA,
      PZG_UKLADWSPOLRZEDNYCH.NAZWA AS UKLADWSPOLRZEDNYCH,
      PZG_DATANAKLAD.DATANAKLADU AS DATANAKLADU,
      PZG_DATANAKLAD.NAKLAD AS NAKLAD,
      NAZWAARKUSZA,
      NAZWAMATERIALU,
      PZG_KATARCHIW.NAZWA AS KATARCHIWALNA,
      PZG_DOKUMENTWYL.OPIS AS DOKUMENTWYL,
      DATAWYL,
      DATAARCHLUBBRAK                               
      FROM PZG_MATERIALZASOBU 
      LEFT JOIN PJDW_OPCJE_MATERIALZASOBU ON PZG_MATERIALZASOBU.ID_PZG_MATERIALZASOBU = PJDW_OPCJE_MATERIALZASOBU.MATERIALZASOBU
      LEFT JOIN PJDW_KATEGORIAOPCJE ON PJDW_OPCJE_MATERIALZASOBU.KATEGORIAOPCJE = PJDW_KATEGORIAOPCJE.ID_PJDW_KATEGORIAOPCJE
      LEFT JOIN PZG_SPOSOBPOZYSKANIA ON PZG_MATERIALZASOBU.SPOSOBPOZYSKANIA = PZG_SPOSOBPOZYSKANIA.ID_PZG_SPOSOBPOZYSKANIA        
      LEFT JOIN PZG_OSOBAINSTYTUCJA ON PZG_MATERIALZASOBU.TWORCA = PZG_OSOBAINSTYTUCJA.ID_PZG_OSOBAINSTYTUCJA        
      LEFT JOIN PZG_ZGLOSZENIE ON PZG_MATERIALZASOBU.IDZGLOSZENIA = PZG_ZGLOSZENIE.ID_PZG_ZGLOSZENIE        
      LEFT JOIN PZG_REJESTRPRAC ON PZG_MATERIALZASOBU.OZNUMOWY = PZG_REJESTRPRAC.ID_PZG_REJESTRPRAC        
      LEFT JOIN PZG_NAZWAMAT ON PZG_MATERIALZASOBU.NAZWA = PZG_NAZWAMAT.ID_PZG_NAZWAMAT      
      LEFT JOIN PZG_JEZYK ON PZG_MATERIALZASOBU.JEZYK = PZG_JEZYK.ID_PZG_JEZYK      
      LEFT JOIN PZG_TYPMATERIALU ON PZG_MATERIALZASOBU.TYPMATERIALU = PZG_TYPMATERIALU.ID_PZG_TYPMATERIALU     
      LEFT JOIN PZG_POSTAC ON PZG_MATERIALZASOBU.POSTACMATERIALU = PZG_POSTAC.ID_PZG_POSTAC  
      LEFT JOIN PZG_NOSNIKNIEELEKTRONICZNY ON PZG_MATERIALZASOBU.RODZNOSNIKA = PZG_NOSNIKNIEELEKTRONICZNY.ID_PZG_NOSNIKNIEELEKTRONICZNY
      LEFT JOIN PZG_FORMATDANYCH ON PZG_MATERIALZASOBU.FORMATDANYCH = PZG_FORMATDANYCH.ID_PZG_FORMATDANYCH
      LEFT JOIN PZG_RODZAJDOSTEPU ON PZG_MATERIALZASOBU.INFODOSTEPIE = PZG_RODZAJDOSTEPU.ID_PZG_RODZAJDOSTEPU
      LEFT JOIN PZG_DATAOKRES ON PZG_MATERIALZASOBU.AKTUALNOSC = PZG_DATAOKRES.ID_PZG_DATAOKRES
      LEFT JOIN PZG_SKALA ON PZG_MATERIALZASOBU.SKALA = PZG_SKALA.ID_PZG_SKALA
      LEFT JOIN PZG_UKLADODNIESIENIA ON PZG_MATERIALZASOBU.UKLODNIESIENIA = PZG_UKLADODNIESIENIA.ID_PZG_UKLADODNIESIENIA
      LEFT JOIN PZG_UKLADWSPOLRZEDNYCH ON PZG_MATERIALZASOBU.UKLWSPOLRZEDNYCH = PZG_UKLADWSPOLRZEDNYCH.ID_PZG_UKLADWSPOLRZEDNYCH
      LEFT JOIN PZG_DATANAKLAD ON PZG_MATERIALZASOBU.DATANAKLAD = PZG_DATANAKLAD.ID_PZG_DATANAKLAD
      LEFT JOIN PZG_KATARCHIW ON PZG_MATERIALZASOBU.KATARCHIWALNA = PZG_KATARCHIW.ID_PZG_KATARCHIW
      LEFT JOIN PZG_DOKUMENTWYL ON PZG_MATERIALZASOBU.DOKUMENTWYL = PZG_DOKUMENTWYL.ID_PZG_DOKUMENTWYL
      WHERE PZG_MATERIALZASOBU.DATAWYL IS NOT NULL    
      ORDER BY PZG_MATERIALZASOBU.ID_PZG_MATERIALZASOBU DESC
  ');
  
  oci_execute($query);
  
  $result = array();
  while (($row = oci_fetch_array($query, OCI_BOTH)) != false) {
  
      $query1 = oci_parse($connection, '
      SELECT GODLONAZWA, POLOZENIE
      FROM PZG_GODLONAZWA_POLOZENIE
      LEFT JOIN PZG_MATERIAL_POLOZENIE ON PZG_GODLONAZWA_POLOZENIE.ID_PZG_GODLONAZWA_POLOZENIE = PZG_MATERIAL_POLOZENIE.ID_PZG_GODLONAZWA_POLOZENIE
      WHERE PZG_MATERIAL_POLOZENIE.ID_PZG_MATERIALZASOBU = '.$row['ID_PZG_MATERIALZASOBU']);
      oci_execute($query1);
  
      $polozenie = &quot;&quot;;
      while (($row1 = oci_fetch_array($query1, OCI_BOTH)) != false) {
          $polozenie .= $row1['GODLONAZWA'].&quot; - &quot;.$row1['POLOZENIE'].&quot;, &quot;;
      }
      $polozenie = substr($polozenie, 0, -2);
      if($row['DATAARCHLUBBRAK'] != &quot;&quot;){
          $dataArchLubBrak = date('Y-m-d', strtotime(str_replace(&quot;/&quot;, &quot;-&quot;, $row['DATAARCHLUBBRAK'])));
      }
      if($row['DATAWYL'] != &quot;&quot;){
          $dataWyl = date('Y-m-d', strtotime(str_replace(&quot;/&quot;, &quot;-&quot;, $row['DATAWYL'])));
      }
  
          array_push($result, array(
          &quot;id&quot;=&gt;$row['ID_PZG_MATERIALZASOBU'],
          &quot;sposobPozyskania&quot;=&gt;$row['SPOSOBPOZYSKANIA'],
          &quot;dataPrzyjecia&quot;=&gt;date('Y-m-d', strtotime(str_replace(&quot;/&quot;, &quot;-&quot;, $row['DATAPRZYJECIA']))),
          &quot;identyfikator&quot;=&gt;$row['IDENTYFIKATOR'],
          &quot;tworca&quot;=&gt;$row['TWORCA'],
          &quot;idZgloszenia&quot;=&gt;$row['IDZGLOSZENIA'],
          &quot;oznUmowy&quot;=&gt;$row['OZNUMOWY'],
          &quot;oznUmowyInnyOrgan&quot;=&gt;$row['OZNUMOWYINNYORGAN'],
          &quot;nazwaMaterialu&quot;=&gt;$row['NAZWAMAT'],
          &quot;polozenieObszaru&quot;=&gt;$polozenie,
          &quot;postacMaterialu&quot;=&gt;$row['POSTAC'],
          &quot;nosnik&quot;=&gt;$row['NOSNIK'],
          &quot;formatDanych&quot;=&gt;$row['FORMATDANYCH'],
          &quot;rodzajDostepu&quot;=&gt;$row['RODZAJDOSTEPU'],
          &quot;opis&quot;=&gt;$row['OPIS'],
          &quot;jezyk&quot;=&gt;$row['JEZYK'],
          &quot;typMaterialu&quot;=&gt;$row['TYPMATERIALU'],
          &quot;aktualnosc&quot;=&gt;$row['DATAOKRES'],
          &quot;oznaczenieMaterialu&quot;=&gt;$row['OZNMATERIALUZASOBU'],
          &quot;idOrgan&quot;=&gt;$row['IDNADPRZEZORGAN'],
          &quot;godloNazwa&quot;=&gt;$row['GODLONAZWA'],
          &quot;skala&quot;=&gt;$row['SKALA'],
          &quot;ukladOdniesienia&quot;=&gt;$row['UKLADODNIESIENIA'],
          &quot;ukladWspolrzednych&quot;=&gt;$row['UKLADWSPOLRZEDNYCH'],
          &quot;dataNaklad&quot;=&gt;$row['DATANAKLADU'].&quot; &quot;.$row['NAKLAD'],
          &quot;nazwaArkuszaSklep&quot;=&gt;$row['NAZWAARKUSZA'],
          &quot;nazwaMaterialuSklep&quot;=&gt;$row['NAZWAMATERIALU'],
          &quot;katArchiwalna&quot;=&gt;$row['KATARCHIWALNA'],
          &quot;dokumentWyl&quot;=&gt;$row['DOKUMENTWYL'],
          &quot;dataWyl&quot;=&gt;$dataWyl,
          &quot;dataArch&quot;=&gt;$dataArchLubBrak
      ));
  }
  </code></pre>