SQL Optimierung Index setzen - Sonderpreise anzeigen -

Hallo, wir haben derzeit extrem lange Ladezeiten bei der Anzeige der Produkte mit Sonderpreisen über das Plugin individuelle Kategorien. Unsere Query dazu: SELECT a.id FROM s_articles AS a INNER JOIN s_articles_attributes as aAttributes ON aAttributes.articledetailsID = a.main_detail_id INNER JOIN s_articles_categories as aCategories ON aCategories.articleID = a.id LEFT JOIN s_articles_prices AS p2 ON p2.articleID=a.id AND p2.pricegroup=‘B2B’ AND p2.to=‘beliebig’ LEFT JOIN s_articles_prices AS p3 ON p3.articleID=a.id AND p3.pricegroup=‘EK’ AND p3.to=‘beliebig’ WHERE IFNULL(p2.pseudoprice, p3.pseudoprice) > 0 AND a.mode = 0 AND a.active=1 GROUP BY a.id ORDER BY LPAD (aAttributes.attr19,5,0) ASC, a.id LIMIT 0, 48 Jemand einen Tipp, wo ich in der DB einen Index setzen kann, damit die Abfrage beschleunigt wird? Bin für jeden Ratschlag dankbar! Gruß

Die Indizes sollten soweit korrekt durch Shopware gesetzt sein. Was sagt ein EXPLAIN SELECT? Ein LDAP() in einem ORDER BY auf eine Spalte ohne Index kann sehr sehr lange dauern, da hier -immer- alle Zeilen untersucht werden müssen. Brauchst du diese Sortierung? Viele Grüße

Hallo, grundsätzlich eigentlich nicht, in der attr19 haben wir einfache Zahlen zur Sortierung gespeichert. Wie könnte ich das dann performanter formulieren? ORDER BY LPAD (aAttributes.attr19,5,0) ASC, a.id Nur mit “aAttributes.attr19 ASC” statt “LPAD (aAttributes.attr19,5,0) ASC” stimmt die Sortierung nicht mehr.

[quote=„Aquatuning GmbH“]Was sagt ein EXPLAIN SELECT?[/quote] Viele Grüße

id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE a index PRIMARY,main_detailID,product_newcomer,get_category_filters PRIMARY 4 1508 Using where; Using temporary; Using filesort 1 SIMPLE p2 ref articleID,pricegroup_2,pricegroup articleID 4 dev_ms_db1.a.id 161 1 SIMPLE aAttributes ref articledetailsID articledetailsID 5 dev_ms_db1.a.main_detail_id 1 Using where 1 SIMPLE aCategories ref articleID,articleID_2 articleID_2 4 dev_ms_db1.a.id 9 Using index 1 SIMPLE p3 ref articleID,pricegroup_2,pricegroup articleID 4 dev_ms_db1.a.id 161 Using where

[quote=„rantanplan“]in der attr19 haben wir einfache Zahlen zur Sortierung gespeichert[/quote] Das dürfte MySQL relativ egal sein, da LPAD() auf strings angewendet wird und MySQL dein attr19 somit als string behandelt. Bevor wir weitermachen: wie lange braucht die query mit deinem ORDER BY - und wie lange ohne? Viele Grüße

Hallo, die Query mit Order by braucht ungecached etwa 150 Sekunden, ohne das ganze Orderby Statement leider genauso lange.

Hallo, die letzte Zeile WHERE IFNULL(p2.pseudoprice, p3.pseudoprice) > 0"; verursacht bei mir diese extrem lange Query. Jemand eine Idee, wie ich den Funktionsinhalt beibehalten kann, aber die Query optimieren kann?