[mysql] order by s1=wert1, s2=wert2.... optimieren.

B

ByeBye 176292

Hallo,

ich bin während meiner Diplomarbeit auf ein kleines Problem gestoßen, dass eine einfache SELECT mit mehrern ORDER BY Anweisungen elendisch langsam wird. Für mich verständlich wieso, aber leider komme ich nicht wirklich darum, dies genauso zu machen.

ein solche SELECT könnte so aussehen:

Code:
SELECT a.id, url, title, description, category_id, parent_id, category_path,category_name FROM tab_sites a INNER JOIN tab_categories b ON a.category_id = b.id WHERE a.description LIKE '%suchwort%' ORDER BY a.category_id=3, a.category_id=10, a.category_id=5, a.category_id=11, a.pagerank LIMIT 0 ,10
... dauert etwa 800ms;
ohne die ORDER BY etwa 80ms;

Ziel der SQL soll sein, dass die Daten nach einander zuerst für category_id=3, dann nach category_id=10 etc geordnet werden. die Sortierung für die Kategorien ändert sich aber mit jedem Zugriff....

Das Hauptproblem für die Dauer ist das ORDER BY, wobei dann pro weiteren Parameter für Order keine merkliche Geschwindigkeitsreduzierung ist.

Obwohl Indizes gesetzt sind, greift er nicht darauf zu.
Zur Lösung hatte ich mir dann eine dritte Tabelle nur mit Id und der category_id und entsprechenden Indizes gebaut, sowie die Sortierung in PHP abgewickelt. jedoch war das ganze auch nicht schneller... ;)

auf ein Match Against () als Ersatz für das Like '%...%' würde ich gerne verzichten, da ich dort nicht alle Ergebnisse bekomme.

Gibt es noch eine andere Idee wie ich das ganze verbessern kann?
 

Neue Beiträge

Zurück