ORDER BY optimieren

whyte
Posts: 61
Joined: 2006-01-09 14:21

ORDER BY optimieren

Post by whyte »

Hallo,

Da hier viele Fachmänner sind und ich nun auch nicht mehr weiter weiß, wollte ich mal fragen, ob jemand hierzu eineLösung hätte.

Ich habe ein kleines Artikelverwaltungsprogramm und mir nun mal eine Testdatenbank mit 1 Mio Artikel angelegt.
Nun erfolgt die Übersicht schon extrem langsam (282.6353 Sekunden - knapp 5 Minuten).

Der SQL Query sieht folgendermaßen aus:

Code: Select all

SELECT id, artnr, liartnr, preis, aktiv, einheit, sonderangebot, sonderpreis, bestellt, auftragswert, artname, artname2, aktiv, frontpage, topangebot
 FROM shop_artikel t1 LEFT JOIN shop_artikeltext t2
 ON t1.id=t2.artid
 WHERE sprachid='0'
 ORDER BY artname LIMIT 0,50


der Explain so:

Code: Select all

1    SIMPLE    t2    ref    arttext_sprachid,arttext_artid    arttext_sprachid    4    const    988050    Using where; Using filesort
1    SIMPLE    t1    eq_ref    PRIMARY,artikel_artid    PRIMARY    4    testartikel.t2.artid    1


angelegte Indexe für diesen Zweck:
- arttext_sprachid,arttext_artid und auch arttext_artname
Allerdings letzteren benutzt er nicht, wie kann ich ihn dazu bringen, auch den Index für den Artikelnamen zu benutzen?
Oder hat jemand eine andere Optimierungsidee ?

Vielen Dank,
Gruß
Marco
Top

terx`
Posts: 23
Joined: 2008-04-10 18:58
Location: Südoldenburger Land

Re: ORDER BY optimieren

Post by terx` »

Wie wärs ganz klasisch mit den Normalformen? Ich vermute, deine Indexes sind etwas falsch angelegt.
Top

whyte
Posts: 61
Joined: 2006-01-09 14:21

Re: ORDER BY optimieren

Post by whyte »

Hallo,
wie meinst du das mit "Normalformen".
Ich vermute es ja eigenltich auch.
Ich habe zunächst mal für die Felder, die ich in den WHEREs habe, einen Index angelegt.
Ich vermute, ich benötige verknüpfte INDEXE, aber ich kann mir nicht vorstellen, dass ich für jede SQL Abfrage, die ich habe, der sich etwas mal unterscheided (in der Sortierung), einen eigenen INDEX brauche ...
Top

whyte
Posts: 61
Joined: 2006-01-09 14:21

Re: ORDER BY optimieren

Post by whyte »

Ich bin mal ein Stück weiter, ich habe mal etwas mit den INDEX rumgespielt, erstmal alle gelöscht.
Nun habe ich für obige Anweisung einen passenden INDEX erstellt und die Abfrage geht nun auch in 0,3 Sek über die Bühne.

Allerdings laufen nun auch alle anderen Abfragen nicht mehr, nun muss ich hier ebenfalls passende INDEXe erstellen.
Leider klappt das aber nicht, wie es soll, denn mein mysql greift jedes mal auf den PRIMARY zurück und die Abfrage dauert wieder Minuten.

Gibts denn irgendwo mal eine gescheite Seite, in der erklärt ist, wie das mit den INDEX funktioniert, also auch das intelligente kombinieren (da wohl immer nur ein INDEX benutzt wird, obwohl mehrere WHERES in der Abfrage sind)?

Vielen Dank!
Top

freddy36
RSAC
Posts: 277
Joined: 2008-03-20 17:31

Re: ORDER BY optimieren

Post by freddy36 »

Top

terx`
Posts: 23
Joined: 2008-04-10 18:58
Location: Südoldenburger Land

Re: ORDER BY optimieren

Post by terx` »

Ein guter Link zum Thema Normalisierung:

http://www.tinohempel.de/info/info/date ... ierung.htm
Top

whyte
Posts: 61
Joined: 2006-01-09 14:21

Re: ORDER BY optimieren

Post by whyte »



Ja den Link kenne ich, die Seite gibts auch in Deutsch, nur ich finde die Beschreibung sehr kompliziert.

Normalisierung bedeutet also, alles in eine Datenbank zu packen ?
Ich habe die 2 Datenbanken absichtlich wegen der Mehrsprachuigkeit getrennt und meinte, mit dem INNER JOIN klappt das.
Aber ich werde mal sehen, vielleicht muss ich eben das so umschreiben, dass ich 2 Abfragen mache, da in der einen ja sowieso lediglich der Text steckt.

Trotzdem mal vielen Dank
Top

terx`
Posts: 23
Joined: 2008-04-10 18:58
Location: Südoldenburger Land

Re: ORDER BY optimieren

Post by terx` »

Normalisierung bedeutet, seine Daten richtig auf Tabellen aufzuteilen und dabei die Primärschlüssel richtig zu setzen.
Top