INSERT INTO erg langzaam
Als ik een simpele query uitvoer, duurt dit soms erg lang.
Deze query's zijn INSERT INTO, en query's om een tabel aan te passen of te maken (via phpmyadmin).
Met SELECT query's heb ik geen problemen.
Een simpele INSERT INTO query waarvan een tabel 4 kolommen heeft (waarvan 1 primary key), duurt soms wel 1 tot 2 seconden.
In mijn ogen is dit erg lang.
Kan ik hier zelf iets aan doen, of moet ik contact opnemen met de hosting-beheerder?
Tenzij je een script hebt met 50 query's zou het normaal goed moeten gaan.
Laat anders even (relevante) code zien.
Index.php
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
if($oDb->query("UPDATE users SET cash=(cash-'".mysqli_real_escape_string($oDb->link(), $_POST['hoeveel'])."'), bank=(bank+'".mysqli_real_escape_string($oDb->link(), $_POST['hoeveel'])."') WHERE id='".$userinfo['id']."'")){
$oDb->log_geld($userinfo['id'], 'bank_transactie', true, true, -$_POST['hoeveel'], $_POST['hoeveel']);
}
echo "bedrag is op de bank gestord.";
?>
if($oDb->query("UPDATE users SET cash=(cash-'".mysqli_real_escape_string($oDb->link(), $_POST['hoeveel'])."'), bank=(bank+'".mysqli_real_escape_string($oDb->link(), $_POST['hoeveel'])."') WHERE id='".$userinfo['id']."'")){
$oDb->log_geld($userinfo['id'], 'bank_transactie', true, true, -$_POST['hoeveel'], $_POST['hoeveel']);
}
echo "bedrag is op de bank gestord.";
?>
$oDb->query is een gewone mysqli_query.
$oDb->log_geld:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
public static function log_geld($user_id, $bron, $cash, $bank, $cash_aantal, $bank_aantal){
$sql = "INSERT INTO geld
(user_id, bron, cash, bank, cash_aantal, bank_aantal, time, ip)
VALUES
('".mysqli_real_escape_string(Data::$log_connection, $user_id)."',
'".mysqli_real_escape_string(Data::$log_connection, $bron)."',
'".mysqli_real_escape_string(Data::$log_connection, $cash)."',
'".mysqli_real_escape_string(Data::$log_connection, $bank)."',
'".mysqli_real_escape_string(Data::$log_connection, $cash_aantal)."',
'".mysqli_real_escape_string(Data::$log_connection, $bank_aantal)."',
'".mysqli_real_escape_string(Data::$log_connection, time())."',
'".mysqli_real_escape_string(Data::$log_connection, getIp())."')";
$query = @mysqli_query(Data::$log_connection, $sql);
if($query){
return true;
}else{
return Database::sqlError($sql, mysqli_error(Data::$log_connection));
}
}
?>
public static function log_geld($user_id, $bron, $cash, $bank, $cash_aantal, $bank_aantal){
$sql = "INSERT INTO geld
(user_id, bron, cash, bank, cash_aantal, bank_aantal, time, ip)
VALUES
('".mysqli_real_escape_string(Data::$log_connection, $user_id)."',
'".mysqli_real_escape_string(Data::$log_connection, $bron)."',
'".mysqli_real_escape_string(Data::$log_connection, $cash)."',
'".mysqli_real_escape_string(Data::$log_connection, $bank)."',
'".mysqli_real_escape_string(Data::$log_connection, $cash_aantal)."',
'".mysqli_real_escape_string(Data::$log_connection, $bank_aantal)."',
'".mysqli_real_escape_string(Data::$log_connection, time())."',
'".mysqli_real_escape_string(Data::$log_connection, getIp())."')";
$query = @mysqli_query(Data::$log_connection, $sql);
if($query){
return true;
}else{
return Database::sqlError($sql, mysqli_error(Data::$log_connection));
}
}
?>
Ik denk zelf dat hier niet zo veel fout aan kan gaan.
Misschien dat mysqli_real_escape_string niet erg snel is?
Toevoeging op 04/12/2013 09:46:13:
Misschien vind hij het niet leuk dat ik 2 databases gebruik?
Ik gebruik een 'gewone' database. En ik gebruik een database voor de logs.
Hoeveel data staat er al in de tabel en hoeveel indices heb je erop zitten? Hoe meer indices (en hoe meer data), hoe langer een insert zal gaan duren. Daar is op zich niet veel aan te doen.
Op dit moment:
In de users tabel heb ik 8 rijen.
In de geld (logs) tabel heb ik 34 rijen. (Dit kunnen er veel gaan worden, denk aan een paar duizend).
En ik heb nergens een index ingesteld.
Gewijzigd op 04/12/2013 16:12:22 door Tom aan t Goor
2 databasen leveren extra tijd op. Dat heb ik zelf namelijk ook.
Is er een mooie manier om toch de tabellen overzichtelijk te houden in de database?
(Behalve overal 'logs_' voor te zetten)
2 databases op zich is ook niet zo'n probleem, zolang je maar niet een extra connectie gaat maken om in de andere database te kunnen invoeren. Als je een database user gebruikt die de juiste rechten heeft op beide databases, dan kan je vanuit 1 connectie alle inserts doen.
Ik zal eens kijken wat er gebeurd als ik de 2e connectie weghaal, en mijn query's aanpas.
Op die manier selecteer je de geld tabel, in de betreffende database.
Erwin H op 05/12/2013 12:36:32:
Sorry voor mijn late reactie.
Ik heb het nogal druk de laatste tijd.
Ik heb dit getest, maar helaas gaat dit ook erg langzaam.
Ik heb contact opgenomen met de server beheerder.
En deze heeft het één en ander aangepast.
Het probleem was blijkbaar dat alle insert into query's erg lang duurden, maakt niet uit in welke database.