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.