Matthias: Performance bei Textzerlegung

Beitrag lesen

In Pseudocode

Setze Prepare-Anweisung mit dem Prepared Statement und Platzhaltern ab
Solange es Datensätze gibt
    Binde die Daten an die Platzhalter
    Führe das Prepared Statement mit den gebundenen Daten aus
Ende Solange

Habe es nun hinbekommen. Ein paar strategisch platzierte & helfen :-)

  
$query  = "INSERT INTO  "  
           ."  table_name "  
           ."  (          "  
           ."    id,      "  
           ."    FieldA,  "  
           ."    FieldB,  "  
           [...]  
           ."    FieldM   "  
           ."  )          "  
           ."VALUES       "  
           ."  (          "  
           ."    '( ?)'   "  
           ."    '( ?)'   "  
           ."    '( ?)'   "  
           [...]  
           ."    '( ?)'   "  
           ."  )          ";  
$params = array( &$A , &$B , &$C , [...] , &$M );  
$stmt   = sqlsrv_prepare( $this->DB_Connector , $query , $params );  
$handle = fopen ( $this->datei_path.$this->datei_name , "r" );  
$nr     = '0';  
while ( ! feof( $handle ) )  
{  
  $nr++;  
  $zeile = fgets( $handle, '4096' );  
  //Leerzeilen abfangen  
  if ( strlen ( trim( $zeile ) ) > '0' )  
  {  
    $A =               substr( $zeile ,   '0' ,  '8' );  
    $B =        ltrim( substr( $zeile ,   '8' , '10' ) , '0' );  
    $C =        ltrim( substr( $zeile ,  '18' , '12' ) , '0' );  
    $D =        ltrim( substr( $zeile ,  '30' , '10' ) , '0' );  
    $E =        ltrim( substr( $zeile ,  '40' , '12' ) , '0' );  
    $F =        ltrim( substr( $zeile ,  '52' , '10' ) , '0' );  
    $G = strtr( ltrim( substr( $zeile ,  '62' , '15' ) , '0' ) , ',' , '.' );  
    $H =         trim( substr( $zeile ,  '77' , ' 1' )       );  
    $I =        rtrim( substr( $zeile ,  '79' ,  '9' ) , ' ' );  
    $J =         trim( substr( $zeile ,  '88' , '10' )       );  
    $K =         trim( substr( $zeile ,  '99' , '20' )       );  
    $L =         trim( substr( $zeile , '120' ,  '8' )       );  
    $M =         trim( substr( $zeile , '128' , '20' )       );  
    sqlsrv_execute( $stmt);  
  }  
}  
fclose ($handle);  

  • A -
    Mit 2.460 Zeilen  7 Sekunden, fgets(), prepared statement
    Mit 6.844 Zeilen 19 Sekunden, fgets(), prepared statement

  • B -
    Mit 2.460 Zeilen  3 Sekunden, fgets(), 300erInserts
    Mit 6.844 Zeilen  7 Sekunden, fgets(), 300erInserts

  • C -
    Mit 2.460 Zeilen  2 Sekunden, file(), 300erInserts
    Mit 6.844 Zeilen  7 Sekunden, file(), 300erInserts

Werde dann wohl Variatne C wählen.

Vielen Dank an alle für die Hilfe und Vorschläge, speziell Vinzenz.

Gruß

Matthias