Ankündigung

Einklappen
Keine Ankündigung bisher.

SQL - Geschwindigkeit

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • SQL - Geschwindigkeit

    Hallo und guten Abend,

    ich experimentiere gerade mit Dateien und Datenbanken. Dabei lege ich sehr viele Zeilen in eine Datenbanktabelle und in eine Datei ab. Ich lege sie ab, rufe sie ab, sortiere sie, update sie,...messe dabei die Zeiten usw..
    Wie gesagt, ist es nur ne kleine Übung aus Neugier.

    Mir ist aber folgendes aufgefallen und es nervt!

    Lege ich z.B. 100 000 Zeilen in eine Datei ab, dauert es auf meinem Computer unter XAMPP (localhost/...) genauso lange wie bei meinem Webhoster (www.example.de/...).

    Lege ich nun die selbe Menge an Daten und Zeilen in eine Datenbank ab, dauert es unter XAMPP sehr sehr lange und bei meinem Hoster ist es relativ zügig.

    Wie kommt es zu solchen Zeitunterschieden und was kann ich tun, dass es bei mit auch recht schnell geht?

    Danke.


  • #2
    Zitat von alex9787 Beitrag anzeigen
    Wie kommt es zu solchen Zeitunterschieden
    Kann viele Ursachen haben.

    und was kann ich tun, dass es bei mit auch recht schnell geht?
    Lernen und das Gelernte anwenden.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      google mal nach "xampp mysql langsam windows" oder so. glaube mich erinnern zu können, dass ich nach irgendeiner anleitung was bei mir umstellen musste, weils bei mir auch langsam lief.

      kann sicherlich aber viele gründe haben. u.a. auch so was triviales wie, dass man bei mysql general_log angestellt hat und vergessen hat. das hat ich auch schon
      liebe Grüße
      Fräulein Dingsda

      Kommentar


      • #4
        Erstmal danke an Beide für die schnelle Antwort. Um es sich besser vorstellen zu können habe ich auf die Schnelle ein einfach Script gebastelt und nochmal ablaufen lassen. Erstmal die Codes:

        Code:
        CREATE TABLE IF NOT EXISTS `nummern` (
          `id` int(10) NOT NULL AUTO_INCREMENT,
          `num` varchar(100) COLLATE latin1_general_ci NOT NULL,
         PRIMARY KEY (`id`)
        )
        Das ist meine Tabelle, die bei mir, sowie bei meinem Hoster auf einer identischen Datenbank liegt.

        PHP-Code:
        <?php
            $start 
        microtime(true);    
            
        $con mysql_connect("xxx""xxx""xxx");
            
        $sel_db mysql_select_db("xxx");
            for(
        $i 10000000$i 10001000$i++)
            {
                
        $q mysql_query("INSERT INTO nummern (num) VALUES ('".$i."')");
            }
            
        mysql_close($con);
            
        $end microtime(true);
            echo 
        $end-$start;
        ?>
        Und das Script habe ich ablaufen lassen. Resultat:
        38 Sekunden unter localhost und
        0,3 Sekunden unter meiner Domain.

        Solche Unterschiede dürfen doch nicht sein oder ist sowas normal? Gruß.

        Kommentar


        • #5
          Zitat von alex9787 Beitrag anzeigen

          Code:
          CREATE TABLE IF NOT EXISTS `nummern` (
            `id` int(10) NOT NULL AUTO_INCREMENT,
            `num` varchar(100) COLLATE latin1_general_ci NOT NULL,
           PRIMARY KEY (`id`)
          )

          Und das Script habe ich ablaufen lassen. Resultat:
          Beschäftige Dich mit Datentypen. Da hast Du massiv Bedarf. Wenn das sitzt: Explain. Und später: Engines, Transaktionen, und der Tatsache, daß MySQL Schrott ist.
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            Lass mich raten, du nutzt Windows 7?

            Kommentar


            • #7
              Bau deinen Code statt mit mysql_ (was sowieso nicht mehr verwendet werden sollte, siehe Signatur) mal um in mysqli mit Prepared statements. Ich kann mir gut vorstellen, dass du damit einiges an Geschwindigkeit raus holen kannst.

              PS: Hast du dir während der 38 sek mal angeschaut, was deine Prozessor und Festplattenauslastung so macht?
              mysql ist veraltet Mails senden: Ohne Probleme und ohne mail()
              PHP-Code:
              echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>'

              Kommentar


              • #8
                Hallo und guten Abend,

                danke für Eure Antwort!

                Nein ich nutze Windows 8 aber ich denke nicht, dass es da große Unterschiede gibt im Bezug auf XAMPP aber ja...windows

                Ich habe XAMPP de- und neu installiert, http://127.0.0.1/ statt localhost probiert, den Code nach den neuen Datenbankbefehlen, wie es bei php.net zu sehen ist umgeschrieben...

                Code:
                <?php
                	$start = microtime(true);	
                	$mysqli = new mysqli("xxx", "xxx", "xxx", "xxx");
                	for($i = 10000000; $i < 10001000; $i++)
                	{
                		$stmt = $mysqli->real_query("INSERT INTO nummern (num) VALUES ('".$i."')");
                	}
                	$mysqli->close();
                	$end = microtime(true);
                	echo $end-$start;
                ?>
                ...und trotzdem dauert das Eintragen von 1000 Datensätzen im Schnitt 40 Sekunden.

                @Chrisva:
                CPU steigt von 3 auf 7%, Arbeitsspeicher bleibt unverändert auf 35% und Datenträger springt von 0 auf 100%. Ach ja und der Lüfter springt an ^^

                Gruß.

                Kommentar


                • #9
                  Prepared Statements? Im schlimmsten Fall ist einfach deine Platte zu langsam...
                  Lerne Grundlagen | Schreibe gute Beispiele | PDO > mysqli > mysql | Versuch nicht, das Rad neu zu erfinden | Warum $foo[bar] böse ist | SQL Injections | Hashes sind keine Verschlüsselungen! | Dein E-Mail Regex ist falsch

                  Kommentar


                  • #10
                    @ApoY2k
                    Ich habe mir "Prepared Statements" eben genauer angeschaut und tauschte...
                    Code:
                    $stmt = $mysqli->real_query("INSERT INTO nummern (num) VALUES ('".$i."')");
                    //um in
                    $stmt = $mysqli->prepare("INSERT INTO nummern (num) VALUES ('".$i."')");
                    ...jetzt dauert es nicht mal eine Sekunde. Kann mir das mal bitte einer erkären?

                    Kommentar


                    • #11
                      Wie lauten die HW-Specs deines Rechners und deines Servers? CPU und HDD-Durchsatz im Besonderen.

                      https://github.com/major/MySQLTuner-perl
                      Standards - Best Practices - AwesomePHP - Guideline für WebApps

                      Kommentar


                      • #12
                        Nah dran. So wird ein schuh draus:

                        PHP-Code:
                        $mysqli = new mysqli("xxx""xxx""xxx""xxx");
                        $stmt $mysqli->prepare("INSERT INTO nummern (num) VALUES (?)");
                        for(
                        $i 10000000$i 10001000$i++)
                        {
                            
                        $stmt->bind_param('s'$i);
                            
                        $stmt->execute();
                        }
                        $mysqli->close(); 
                        Lerne Grundlagen | Schreibe gute Beispiele | PDO > mysqli > mysql | Versuch nicht, das Rad neu zu erfinden | Warum $foo[bar] böse ist | SQL Injections | Hashes sind keine Verschlüsselungen! | Dein E-Mail Regex ist falsch

                        Kommentar


                        • #13
                          Zitat von rkr Beitrag anzeigen
                          Wie lauten die HW-Specs deines Rechners und deines Servers? CPU und HDD-Durchsatz im Besonderen.

                          https://github.com/major/MySQLTuner-perl
                          Naja, auch die Konfiguration der Datenbank spielt eine nicht unerhebliche Rolle (wer hier spart, darf sich nicht über Performance-Engpässe wundern).

                          Im allgemeinen ist eine XAMPP Datenbank eher klein dimensioniert, wohingegen eine Datenbank beim Hoster (meist auf einem dedizierten Rechner) dann doch etwas mehr Power unter der Haube hat, selbst wenn die Datenbank von mehreren Benutzern geteilt wird.
                          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                          Kommentar

                          Lädt...
                          X