langsame MySQL Abfrage
bearbeitet von dedlfixHallo,
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.
~~~sql
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
~~~
langsame MySQL Abfrage
bearbeitet von dedlfixHallo,
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.
~~~sql
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
~~~sql
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
~~~
langsame MySQL Abfrage
bearbeitet von tobi85Hallo,
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.
~~~sql
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
~~~
langsame MySQL Abfrage
bearbeitet von MudGuardHallo,
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.
~~~sql
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
langsame MySQL Abfrage
bearbeitet von tobi85Hallo,
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
langsame MySQL Abfrage
bearbeitet von tobi85Hallo,
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.
~~~sql
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
~~~
langsame MySQL Abfrage
bearbeitet von dedlfixHallo,
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.
~~~sql
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
~~~
langsame MySQL Abfrage
bearbeitet von Matthias ApselHallo,
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.
~~~sql
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
~~~sql
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
~~~
langsame MySQL Abfrage
bearbeitet von Matthias ApselHallo,
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