Ankündigung

Einklappen
Keine Ankündigung bisher.

Geschwindigkeitsproblem mysl UPDATE

Einklappen

Neue Werbung 2019

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

  • Geschwindigkeitsproblem mysl UPDATE

    Hallo Leute,

    stehe vor einem Problem und komm nicht recht weiter

    Eins vorweg, habe vor ein paar Tagen das erste mal seit 10 Jahren wieder mal PHP/MySql in Angriff genommen, kann also durchaus sein das ich einfach einen selten dämlichen Anfängerfehler mache ^^

    Habe eine Tabelle in der sich ein Feld (varchar(20)) befindet, wo Artikelnummern reinkommen.
    Ebenfalls ist in dieser Tabelle ein anderes Feld (decimal(10,2)), wo Preise reinkommen.
    (insgesamt in der tabelle 12 Felder)
    Ich importiere dort von einer csv-datei 40.000 datensätze, jedoch ist in dieser csv datei der Preis noch nicht enthalten, sondern gesondert in einer zweiten csv datei.

    Mein Vorgang also:
    -) Artikel importieren, dauert ein paar Sekunden. (40.000 Einträge)
    -) Preise einfügen (mysql_query("UPDATE tabelle SET product_price = $price WHERE distributor_prodnum = $art"))

    Und genau bei Punkt Zwei ist mein Problem. Dieses Update dauert ewig.
    Habe index auf das Feld gelegt wonach gesucht wird, habe die Datenbank mit phpmyadmin optimiert, helfen tut irgendwie nichts.
    Das Update benötigt für 100 Produkte schon 18 Sekunden. ...was bei 40.000 passiert kann man sich also vorstellen.

    Um auszuschließen das es irgendwas mit der CSV, bzw. meinem Import/Update-Script von CSV, zu tun hat habe ich testweise einfach mal ein zweites Table angelegt. Dort die zweite CSV importiert, und dann quasi ein Update von SQL nach SQL gemacht. Gleich langsam.

    Hoffe mein Geschreibe war so halbwegs verständlich, und noch mehr hoffe ich das jemand eine Idee zum meinem Problem hat

    PS. die Preise generell auf ein andres Table auszulagern, und dann einfach von dort bei Bedarf zu holen, ist zwar eine Option. Möchte ich aber vermeiden da ich sonst alles überarbeiten anpassen muss.

    Danke schonmal und schöne Grüße

  • #2
    Zeig mal die erzeugte Tabelle.

    Code:
    SHOW CREATE TABLE `table_name`;

    Kommentar


    • #3
      CREATE TABLE `tabelle` (
      `ID` int(20) NOT NULL AUTO_INCREMENT,
      `datumzeit` datetime DEFAULT NULL,
      `distributor` tinytext CHARACTER SET utf8,
      `product_name` mediumtext CHARACTER SET utf8,
      `product_ean` bigint(20) DEFAULT NULL,
      `product_manufactor_no` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
      `product_manufactor` mediumtext CHARACTER SET utf8,
      `product_price` decimal(10,2) DEFAULT NULL,
      `product_stock` smallint(6) DEFAULT NULL,
      `distributor_prodnum` varchar(20) CHARACTER SET utf8 DEFAULT NULL,
      `UVP` decimal(10,2) DEFAULT NULL,
      `lieferstatus` varchar(30) CHARACTER SET utf8 DEFAULT NULL,
      KEY `product_manufactor_no` (`product_manufactor_no`),
      KEY `distributor_prodnum` (`distributor_prodnum`)
      ) ENGINE=MyISAM AUTO_INCREMENT=9123737 DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci

      Kommentar


      • #4
        Habe index auf das Feld gelegt
        Wo?
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          KEY `product_manufactor_no` (`product_manufactor_no`),

          das heisst doch das ein index draufliegt oder? hab halt im phpmyadmin auf das passende symbol (glaub ein blitz...?) geklickt

          edit: das wollt ich eigentlich rei kopieren:
          KEY `distributor_prodnum` (`distributor_prodnum`)

          Kommentar


          • #6
            Wenn ich deine Tabelle anlegen will, bekomme einen Fehler.. #1075 ... http://stackoverflow.com/questions/8...vs-another-key

            Deine `ID` (AUTO_INCREMENT) hat keinen Index. Setze mal einen PRIMARY drauf (hast du noch keinen und bietet sich bei `ID` gut dafür an) und versuch mal, ev. reicht das ja schon.

            LG
            The string "()()" is not palindrom but the String "())(" is.

            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #7
              Zitat von LordHoernchen Beitrag anzeigen

              Mein Vorgang also:
              -) Artikel importieren, dauert ein paar Sekunden. (40.000 Einträge)
              -) Preise einfügen (mysql_query("UPDATE tabelle SET product_price = $price WHERE distributor_prodnum = $art"))
              )
              Lies die Preise in eine extra Tabelle und mache dann statt 40.000 Updates nur eines.

              Davon abgesehen: wer heute noch MyISAM nutzt weiß vermutlich nicht, daß sich die Welt in den letzten Jahren ein ganzes Stück weitergedreht hat.
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar


              • #8
                @ hausl: danke fuer deine bemühung - werds heute abend gleich mal testen.

                @ akretschmer: hatte schon die befürchtung das es darauf hinauslaufen wird ;(
                ja wie gesagt - hab mich ewig nicht damit beschäftigt. 'myisam' das bezeichnet doch die 'enginge' der datenbank/tabelle oder? ...wird zeit das ich mich da mal wieder ein bisschen einlese

                habe aktuell eine "dreckige" loesung. um mitternacht wird per cronjob das table kpl. geleert, dann der artikelstamm importiert, dann kommt der ewig-dauernde preisimport. danach alle andren lieferanten... (im endeffekt knapp 300.000 eintraege)
                schade nur das ich halt momentan die preise nur einmal am tag aktualisieren kann.

                danke jedenfalls an alle fuer das feedback

                Kommentar

                Lädt...
                X