Ralph Ernst: LIMIT und ORDER BY - wie mach ich das richtig?

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

  1. 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

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    "I wish it need not have happened in my time" - "So do I, and so do all who live to see such times. But that is not for them to decide. All we have to decide is what to do with the time that is given us."  --  J.R.R. Tolkien: "The Lord Of The Rings: The Fellowship Of The Ring"
    1. 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