Hallo,
ich habe ein Problem mit einer MYSQL Abfrage, weil diese sehr langsam ist. Mir ist bewusst, dass man hier wenig dazu sagen kann, wenn man die DB-Struktur nicht kennt, aber ggf. kann mir ja doch jemand helfen, wie ich die Anfrage effektiver gestalten kann, bzw. wo ich noch indexes setzen sollte.
Die Abfrage soll beim einem Artikel schauen, welche Artikel andere Kunden auch noch gekauft hatten.
SELECT COUNT(artikel_attribut.anr) as count, artikel_attribut.anr
FROM artikel_attribut
JOIN artikel ON artikel.anr=artikel_attribut.anr AND artikel.anr!='1'
JOIN auftrag_artikel ON auftrag_artikel.atrnr=artikel_attribut.atrnr AND auftrag_artikel.date>'2016-01-04'
WHERE auftrag_artikel.auftragnr IN (SELECT auftrag_artikel.auftragnr FROM auftrag_artikel JOIN artikel_attribut ON artikel_attribut.atrnr=auftrag_artikel.atrnr AND artikel_attribut.anr='1')
GROUP BY artikel_attribut.anr
ORDER BY count DESC
LIMIT 6
Aktuell braucht diese Abfrage über eine halbe Sekunde
id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra 1|PRIMARY|artikel|range|PRIMARY|PRIMARY|4||2463|Using where; Using index; Using temporary; Using filesort 1|PRIMARY|artikel_attribut|ref|PRIMARY, INDEX_ANR, INDEX_PREIS2, INDEX_ARTIKEL_PREIS|INDEX_ANR|4|slewo_live.artikel.anr|7|Using where; Using index 1|PRIMARY|auftrag_artikel|ref|INDEX_ATRNR|INDEX_ATRNR|4|slewo_live.artikel_attribut.atrnr|3|Using where 2|DEPENDENT SUBQUERY|auftrag_artikel|ref|INDEX, INDEX_ATRNR|INDEX|4|func|1| 2|DEPENDENT SUBQUERY|artikel_attribut|eq_ref|PRIMARY, INDEX_ANR, INDEX_PREIS2, INDEX_ARTIKEL_PREIS|PRIMARY|4|slewo_live.auftrag_artikel.atrnr|1|Using where