INSERT INTO erg langzaam

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tom aan t Goor

Tom aan t Goor

04/12/2013 09:10:21
Quote Anchor link
Hoi,

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?
 
PHP hulp

PHP hulp

18/04/2024 21:34:51
 

04/12/2013 09:20:01
Quote Anchor link
In de meeste gevallen ligt het óf aan de Dataverkeer (wat nu zeker nog hoog is lijkt mij, aan het begin v/d maand) óf je moet contact opnemen met je Hosting.

Tenzij je een script hebt met 50 query's zou het normaal goed moeten gaan.
Laat anders even (relevante) code zien.
 
Tom aan t Goor

Tom aan t Goor

04/12/2013 09:44:43
Quote Anchor link
Hier wat code:

Index.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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.";
?>


$oDb->query is een gewone mysqli_query.

$oDb->log_geld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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));
        }
    }

?>


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.
 
Erwin H

Erwin H

04/12/2013 12:45:07
Quote Anchor link
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.
 
Tom aan t Goor

Tom aan t Goor

04/12/2013 16:12:08
Quote Anchor link
Sorry voor mijn late reactie.

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
 

04/12/2013 16:16:58
Quote Anchor link
2 databasen leveren extra tijd op. Dat heb ik zelf namelijk ook.
 
Tom aan t Goor

Tom aan t Goor

05/12/2013 09:32:44
Quote Anchor link
Oke, dan ga ik alles in 1 database stoppen.

Is er een mooie manier om toch de tabellen overzichtelijk te houden in de database?
(Behalve overal 'logs_' voor te zetten)
 
Erwin H

Erwin H

05/12/2013 10:19:55
Quote Anchor link
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.
 
Tom aan t Goor

Tom aan t Goor

05/12/2013 12:34:17
Quote Anchor link
Oke, ik heb nu dus wel 2 connecties.

Ik zal eens kijken wat er gebeurd als ik de 2e connectie weghaal, en mijn query's aanpas.
 
Erwin H

Erwin H

05/12/2013 12:36:32
Quote Anchor link
Zorg dan wel dat de database die niet is gespecificeerd in de connectie, gebruikt wordt in de query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
INSERT INTO database_name.geld(kolom1, kolom2, etc)
VALUES(...);

Op die manier selecteer je de geld tabel, in de betreffende database.
 
Tom aan t Goor

Tom aan t Goor

11/12/2013 11:26:12
Quote Anchor link
Erwin H op 05/12/2013 12:36:32:
Zorg dan wel dat de database die niet is gespecificeerd in de connectie, gebruikt wordt in de query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
INSERT INTO database_name.geld(kolom1, kolom2, etc)
VALUES(...);

Op die manier selecteer je de geld tabel, in de betreffende database.


Sorry voor mijn late reactie.
Ik heb het nogal druk de laatste tijd.

Ik heb dit getest, maar helaas gaat dit ook erg langzaam.
 
Tom aan t Goor

Tom aan t Goor

12/12/2013 13:57:36
Quote Anchor link
Opgelost:

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.