Jump to content
xt:Commerce Community Forum

Performance Problem beheben


lingott

Recommended Posts

Nimms mir nicht übel, aber man sollte sich das Query ansehen, das ich kritisiert habe. Es handelt sich um den normalen Primary Key und nicht um den durchaus hilfreichen zusätzlichen Index auf categories_id. Ich weiss, wie MySQL arbeitet und verstehe auch das Explain. Aber darum gings gar nicht...:rolleyes:

Das ist kein Quatsch.

Wenn du dir das Explain richtig angeguckt hättest dann würdest du den Unterschied sehen.

PHPmyadmin sagt zwar, dass ein Index für das Feld bereits existiert jedoch steht das Feld "categories_id" an zweiter Stelle im Primary Key.

Der der Index kann also nur verwendet werden, wenn im WHERE auch das Feld "products_id" abgefragt wird.

Der MySQL Query Optimizer macht in diesem Fall keinen so guten Job und baut die Query nicht ganz optimal auf.

Vor der Änderung ist der Optimizer hingegangen und hat erstmal alle Produkte aus der Tabelle "products" ausgelesen und hat erst danach geschaut welches Produkt ist eigentlich in der gesuchten Kategorie.

Nach meiner Änderung macht er es genau anders herum.

Er guckt erst nach welche Produkte in dieser Kategorie sind und holt sich dann aus der Tabelle "products" alle nötigen Daten.

Schau dir das Explain an und du wirst den Unterschied sehen.

Jetzt nicht verwirren lassen aber man kann den Index auch weglassen wenn man den Query Optimizer umgeht und ein STRAIGHT JOIN einbaut.

Aber das ist eher was für Profis und es gibt auch ein paar Nachteile.

~Andreas

Link to comment
Share on other sites

Hallo, Super Sache!

Kann mir bitte jemand kurz erklären, wo und wie ich die Performance messen kann. Ihr schreibt ja, dass es bei euch wesentliche Verbesserungen gibt nach MySQl-Änderung, würde auch gerne den Vorher- / Nachher-Vergleich machen.

vielen Dank

Link to comment
Share on other sites

Kann mir bitte jemand kurz erklären, wo und wie ich die Performance messen kann.

Manchmal frage ich mich wirklich ob die Posts hier auch gelesen werden!?

Du musst eigentlich nur ein "reset query cache;" vor jede Query setzen.

Dann wird dir die Zeit ohne Benutzung des Caches angezeigt.

Entweder direkt auf der Console oder z.B. im PHPmyAdmin.

Link to comment
Share on other sites

Sorry, aber kapiere es nicht. Den Index zu setzen ist kein Problem aber mit der Performancemessung tu ich mich einfach schwer.

Bei 1&1 im phpmyadmin gehe ich auf products_to_categories und gebe in das Eingabefeld für SQL-Befehle

reset query cache; `products_id`

ein, aber es wird mir ein Fehler angezeigt.

Ich kenne mich nur so gut wie überhaupt nicht mysql aus, aber es dürfte doch nicht so schwer sein. Bitte zeige mir was ich genau machen muss.

Vielen Dank im Voraus

Link to comment
Share on other sites

  • 3 weeks later...

products_id hat doppelte einträge, weil ein Artikel in verschiednen Kategorien existiert.

categories_id hat doppelte einträge, weil in einer categorie viele verschiedene Artikel existieren.

Also bekomme ich beim anlegen eines primary_key auf die categories_id die nachricht: SQL Error,: Duplicate entry '61' for key 1, wobei 61 die Kategorie ist, wo sich mehrere Artikel befinden.

Wenn ich den primary_key auf die products_id lege, dann kommt: Duplicate entry '1316' for key 1, wobei 1316 der erste Artikel ist, der in mehreren Kategorien existiert und dadurch in der product_id Spalte mehrmals vor kommt.

Das ganze passiert, wenn ich den primary key versuche zu löschen und neu setzen, der im Moment auf beiden spalten (product_id und categories_id) gelegt ist. Wenn ich einen neuen Index setze, dann kann ich den zwar auf die categories_id legen, der shop wird dadurch kein bisschen schneller oder langsamer. Klar, niemand verwendet den zuätzlichen Index.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
  • Create New...