Hallo Sven,
Für diese Behauptung hätte ich ja gerne mal Belege oder zumindest Indizien.
es macht Sinn, wenn man viele Updates oder Selects in Batches zusammenfasst, da die Kommunikation zwischen MySql Server und PHP reduziert wird.
Hier ein Beispiel.
$db = mysqli_init();
@mysqli_real_connect(
$db, DB_IP,
DB_USER, DB_PASS,
DB_NAME, DB_PORT, DB_SOCK,
MYSQLI_CLIENT_COMPRESS
) or die ("
Keine Verbindung zur Datenbank:
".mysqli_connect_error()
);
$mc_test = microtime(true);
for($i=0; $i<=10; $i++)
{
$sql = "SELECT * FROM `test` WHERE `id` = ".$i.";";
$result = mysqli_query($db, $sql);
if($result) {
while($row = mysqli_fetch_assoc($result)) {
}
}
}
echo "1.) ".round(microtime(true)-$mc_test,3)."s<br />";
$mc_test = microtime(true);
$sql_multi = "";
for($i=0; $i<=10; $i++) {
$sql_multi .= "SELECT * FROM `test` WHERE `id` = ".$i.";";
}
if (!empty($sql_multi)) {
if (mysqli_multi_query($db, $sql_multi)) {
do {
if ($result = mysqli_store_result($db)) {
while ($row = mysqli_fetch_assoc($result)) {
} mysqli_free_result($result);
}
} while(mysqli_next_result($db));
}
}
echo "2.) ".round(microtime(true)-$mc_test,3)."s<br />";
$mc_test = microtime(true);
for($i=0; $i<=10; $i++) {
$sql = "UPDATE `test` SET `value` = 1 WHERE `id` = ".$i.";";
mysqli_query($db,$sql);
}
echo "3.) ".round(microtime(true)-$mc_test,3)."s<br />";
$mc_test = microtime(true);
$sql_multi = "";
for($i=0; $i<=10; $i++) {
$sql_multi .= "UPDATE `test` SET `value` = 1 WHERE `id` = ".$i.";";
}
mysqli_multi_query($db, $sql_multi);
if (mysqli_more_results($db)) {
while (mysqli_next_result($db));
}
echo "4.) ".round(microtime(true)-$mc_test,3)."s<br />";
Der MySql Server steht in Wien, der Webserver in Salzburg:
1.) 0.216s
2.) 0.06s
3.) 0.234s
4.) 0.062s
Auf dem selben Server in Wien:
1.) 0.002s
2.) 0.001s
3.) 0.001s
4.) 0s
Je nach Anzahl der Queries, kann man so ganz gut Zeit herausholen. Gibt es viele Zugriffe/Sec, kann das wichtig sein.
Herzliche Grüße,
Robert