Ich habe jetzt mal einfach so versucht den Shop zu stressen und habe diesen mit 200.000 Testartikel gefüttert. Neben den Probleme mit den neuen Artikeln (viele neue Artikel führen zu langen Ladezeiten) bin ich noch über ein Problem gestolpert: Der Shop ruft viel zu viele Daten unnötig ab und nutz diese nicht.
Konkret:
Habe eine Kategorie mit 150.000 Artikeln (ich weiss, unrealistisch, hat niemand). Bei "neue Artikel" und Massenimport aber dann doch gar nicht mehr so unrealistisch.
Ruft man diese Kategorie im Shop auf, dauert es ewig bis die Seite geladen wird und man läuft mit hoher Wahrscheinlichkeit in einen Timeout.
Der Grund ist einfach: Es werden alle Artikel dieser Kategorie abgerufen, obwohl nur die ersten 20 angezeigt werden sollten. Blättert man 1 Seite weiter (Artikel 21-40) erfolgt wieder ein vollständiger Abruf.
Man müßte die SQL-Abfrage umbauen so dass nur 20 Artikel abgerufen werden.
Die erste Idee sieht in etwa so aus:
SELECT * FROM products LIMIT 0,20
analog dann für die Artikel 101-120
SELECT * FROM products LIMIT 101,20
Wer das mit 100.000 Artikel probiert wird feststellen, dass die Abfrage mit immer höheren Startwerten immer langsamer wird.
Man könnte aber eine indizierte Spalte zu Ermittlung des Startwertes "missbrauchen". Das sieht dann so aus:
SELECT * FROM products WHERE products_id > 50000 ORDER BY products_id LIMIT 20
Setzt man nun für die neue Abfrage products_id immer auf den letzten angezeigten Wert von products_id erhält mein eine performnte Abfrage auch für viele Artikel.
Linkback: https://www.modified-shop.org/forum/index.php?topic=33099.0