LIMIT und ORDER BY - wie mach ich das richtig?
Ralph Ernst
- datenbank
Hallo liebes Forum,
ich bin mir nicht sicher, wie ich vorgehen soll. Ich moechte aus einer groesseren (> 6.000.000 Eintraege) Datenbank 10 Ergebnisse auswählen, und zwar mit LIMIT. Diese 10 Ergebnisse sollen aber die sein mit der größten Relevanz (also mittels ORDER BY).
Etwa in der Art
SELECT id FROM orte WHERE name LIKE 'B%' ORDER BY population LIMIT 0, 10
Das Ergebnis sollte dann etwas in der Art "Buenos Aires, Bangkok, Bogota, Bagdad, Bangalore, ..." sein. Aber das Problem ist natürlich, dass 'B%' erstmal abartig viele Ergebnisse bringt und das Sortieren dann entsprechend aufwändig ist :-(
Wie macht man sowas denn dann am besten?
Ralph
Hello,
Wie macht man sowas denn dann am besten?
Im Prinzip schon so, wie du angefangen hast. Ziehe am Besten mal EXPLAIN heran und schau dir an, wie die Datenbank an die Verarbeitung herangeht. Möglicherweise lässt sich deine Indexstruktur optimieren, so dass Sortieren oder Suchen per Index gelöst werden kann. Da du B% und nicht %B% verwendest, sollte ein Index sogar noch einigermaßen arbeiten können.
MfG
Rouven
Hallo Rouven,
ok, danke! Indexe sind alle gesetzt :-) Aber ich habe gerade festgestellt, dass es doch ein ganz gewaltiger Unterschied ist, ob ich nach "B%" oder "Bang%" suche. "Bang%" geht mit den Indexen tatsächlich recht flott.
Interessant fand ich jetzt uebrigens noch folgendes Projekt: http://www.sphinxsearch.com/. Das scheint dazu angetan, das Ganze noch etwas zu beschleunigen! Zumindest, sobald es um '%B%' geht.
Ralph