Ich habe eine Tabelle mit etwa 3 Millionen Zeilen, die aus Städten besteht, die Länder, in denen die Stadt liegt und einige andere Daten.MySQL Wählen Sie zeigen bestimmte Spaltenwerte zuerst
Ich möchte zum Beispiel begrenzte Zeilen abrufen, wo der Name der Stadt mit einer bestimmten Zeichenfolge beginnt, aber listet diejenigen auf, die zuerst in einem bestimmten Land liegen.
Ich habe versucht, sie durch Land <> "uns" zu bestellen, was sehr langsam ist, da der Server alle gefundenen Zeilen sortieren muss, bevor das Limit angewendet wird.
Nun kam ich mit folgenden Aussage auf:
(SELECT * FROM cities WHERE city LIKE "ab%" AND country = "at" LIMIT 5)
UNION
(SELECT * FROM cities WHERE city LIKE "ab%" LIMIT 5)
LIMIT 5
Es ist sehr schnell mit jedem Präfixlänge aber es sieht ein bisschen schmutzig.
Gibt es einen effizienteren Weg, dies zu tun?
Ich denke, das ist so gut wie es geht. – Barmar
Ich folge nicht der Logik der Abfrage. Warum bewerben Sie 'LIMIT 5' auch nach außen, wenn Sie bereits nur 10 Datensätze haben? –
@TimBiegeleisen Weil er nur 5 Reihen im Endergebnis haben will. Wenn es weniger als 5 Zeilen von "at" gibt, möchte er die verbleibenden Slots aus anderen Ländern füllen. – Barmar