Raketensilo: Ups. Unfair gemessen!

Beitrag lesen

Habe gerde gesehen, ich habe unfair gemessen - und zwar zum Nachteil der Datenbank (Zeilen 37,38 mussten getauscht werden, weil das Einlesen der 1000 Wörter nicht zum vergleich gehört…)

<?php
# Tabelle angelegt mit:
# create table `test`.`kategorien`
# (`Kategorie` VARCHAR(30) NOT NULL );


# set $database, $user and $pass
include 'settings.php'; 
$dbh = new PDO( 
	"mysql:host=localhost;dbname=$database",
	$user,
	$pass
);

# Frisch einlesen?
/*
$dbh -> query( 'DELETE FROM `kategorien`' );

$w500 = json_decode(
   file_get_contents( '500.json' )
);

for($i=0; $i<count( $w500 ); $i++) {
	$w500[$i] = '(' . $dbh->quote( $w500[$i] ) . ')';
}

$sql = "INSERT INTO `test`.`kategorien`(`Kategorie`) VALUES "
. implode(',', $w500 );

$startT = hrtime( true );
$dbh -> query( $sql );
echo "Einlesen der 500 Wörter in die Datentabelle:       "
. ( hrtime( true ) - $startT ) / 1e+6 . " ms.\n";
#*/


$w1000 = explode( ' ', file_get_contents( '1000.txt' ) );
$startT = hrtime( true );
for($i=0; $i<count( $w1000 ); $i++) {
	$w1000[$i] = $dbh->quote( $w1000[$i] );
}


$sql = "SELECT `Kategorie` FROM `test`.`kategorien`
       WHERE `Kategorie`
       IN (" . implode(',', $w1000 ) . ")";

$sth = $dbh->prepare( $sql );
$sth->execute();

$founds=[];
while ( $result = $sth->fetch( PDO::FETCH_ASSOC ) ) {
	$founds[] = $result['Kategorie'];
}

echo "Ermitteln der Übereinstimmungen aus der Datenbank: "
. ( hrtime( true ) - $startT ) / 1e+6
. " ms.\n";

#print_r( $founds );

Ergebnisse:

Erster Start:

Ermitteln der Übereinstimmungen aus der Datenbank: 4.055074 ms.

Zweiter Start (Daten aus dem Abfragecache von MySQL):

Ermitteln der Übereinstimmungen aus der Datenbank: 0.945233 ms.

Aber die Aussage muss ich nicht ändern, denn in reinem PHP waren es:

php 2.php
Lesen der 500 Wörter  : 0.133038 ms.
Vergleich mit aus 1000: 0.119373 ms.