Sehr langsamer bzw. schneller Join...

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

  • Sehr langsamer bzw. schneller Join...

    Ich bin gerade dabei einen kleinen Shop zu programmieren, und teste nun aus was besser ist, die Kommentare zu den Produkten in eine eigene Tabelle, oder zu dem jeweiligen Produkt in eine Spalte quetschen. Alleine wegen der Administration wäre es mir ja eigentlich schon lieber sie in eigene Tabelle zu setzen.

    Wenn die Kommentare beim Produkt untergebracht sind, dann dauert die Abfrage inkl exploden der Kommentare, bei 500 Produkten, ungefähr 2.8 Sekunden. Wobei die Abfrage selbst nur ca. 0.05 Sekunden dauert, das Exploden ist es was so lange dauert. Also noch etwas das gegen diese Methode spricht.

    Sind die Kommentare in einer extra Tabelle, dann wird es etwas schwieriger, das einzigste was mir einfiel, war die Anzahl der Kommentare auszulesen, und dann halt später die Kommentare selbst auszulesen wenn der Benutzer sie sehen will.

    Das merkwürdige ist das dieser Join sowohl bei 500, als auch bei nur einem Datensatz, immer um die 1.6-1.8 Sekunden benötigt. Zum testen sind jeweils 64 Kommentare zu jedem der 500 Produkte vorhanden.

    Code:
    SELECT t1.id AS id, t1.category_id AS category_id, t1.item AS item,
           t1.price AS price, t1.discount AS discount, t1.quantity AS quantity,
           t1.image AS image, t1.description AS description,
           COUNT(t2.id) AS comments, t1.date AS date
    FROM items AS t1
    INNER JOIN comments AS t2 ON t2.item_id = t1.id
    GROUP BY t1.id
    Das kann doch nicht normal sein, oder? Wenn ein Datensatz schon 1.6 Sekunden benötigt, dann müßte es bei 500 doch wesentlich mehr sein, bzw. umgekehrt, bei nur einem wesentlich weniger wenn 500 Datensätze 1.6 Sekunden benötigen?

    Gruß
    Olli

  • #2
    explode() ?

    ich denke, du hast den sinn einer DB verfehlt ....

    lege die comments in einer extra tabelle incl produkt-id ab.

    jeder comment ist ein eigener eintrag. und vergiss das explode in diesem zusammhang (sehr)schnell wieder.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Natürlich, den hab ich auch schon wieder vergessen, das war halt die Methode 1, das war eigentlich nur zur Erklärung warum ich zu Methode 2 übergegangen bin. Und bei genau der ensteht halt oben genanntes "Problem".

      Gruß
      Olli

      Kommentar


      • #4
        welches problem?

        was hat EXPLAIN gesagt?
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Das Problem war das die Abfrage eines Datensatzes genauso lange dauert, wie die Abfrage von 500 Datensätzen.

          EXPLAIN hast gesagt das ich mal wieder nicht aufgepasst habe, und die item_id in den Comments nicht indexiert habe, so hat er immer alle 32000 durchsucht, und nicht nur 500.

          Asche über mein Haupt

          Gruß
          Olli

          Kommentar

          Lädt...
          X