So unten die DB mit 350.000 Artikeln (user/PW: demo@modified-shop.org / modified).
Ich bin etwas verwirrt, was das Ergebnis der folgenden Abfrage anbelangt:
EXPLAIN SELECT COUNT(*) AS total FROM products p, products_to_categories p2c WHERE p.products_id = p2c.products_id AND p.products_status = '1' AND p2c.categories_id = '1'
Ich bekomme als Ergebnis rund 247.000 rows bei 250.000 Artikel in Kategorie 1 raus. Soweit so gut, heißt ja eigentlich nur, dass der Index nicht richtig greift.
EXPLAIN SELECT COUNT(*) AS total FROM products p, products_to_categories p2c WHERE p.products_id = p2c.products_id AND p.products_status = '1' AND p2c.categories_id = '5'
Ich bekomme als Ergebnis rund 2.200 rows bei rund 2.200 Artikel in Kategorie 5 raus. Auchhier greift der Index nicht richtig.
Habe nun den Index in Tabelle products_to_categories geändert auf (categories_id, products_id) statt (products_id, categories_id).
Ergebnis zunächst wie oben.
Dann zusätzlichen Index in Tabelle Products erstellt über (products_status, products_id). Hier ändert sich nun das Ergebnis der o. g. Abfragen, allerdings nicht wie erwartet.
Abfrage auf Kategorie 5 bringt nun rund 1.400 rows => klare Verbesserung, war zu erwarten.
Abfrage auf Kategorie 1 bringt keien Verbeserung, der Wert für Rows liegt weiterhin bei 247.000.
Das Ergebnis nach
repair TABLE products_to_categories
ist identisch mit den obigen.
Hat da jemand eine Erklärung für?
PS
Der Import von 100.000 Artikel (Bestand im Shop 250.000 auf jetzt 350.000) hat übrigens fast 24 Stunden gedauert.