2016-04-21 2 views
1

Ich habe eine MySQL-Tabelle für Benutzer, die wie folgt (ein Teil davon) aussieht:MySQL: Standardreihenfolge in LIKE-Abfragen?

  • user_id, user_name, user_password, ...

Jetzt möchte ich alle Benutzer erhalten, die enthält "foo". Ich verwende die folgende Abfrage:

SELECT user_id, user_name FROM users WHERE user_name LIKE '%foo%' 

Frage: Wie die Ergebnisse der LIKE-Abfragen standardmäßig geordnet sind, wenn ich keine ORDER BY-Klausel?

+0

ORDER BY 'ASC' nach Primärschlüssel. –

+0

@FrayneKonok Das ist nicht immer der Fall, vor allem, wenn die Datensätze nicht in der Tabelle in Primärschlüssel Reihenfolge –

+0

@RowlandShaw platziert wurden Aber die Reihenfolge der Ergebnisse kommen immer wie ASC Bestellung mit dem Primay-Schlüssel. –

Antwort

1

Wenn keine Klausel ORDER BY angegeben ist, ist die Reihenfolge unbestimmt.

Im einfachen Fall aus einer einzigen Tabelle der Auswahl waren Indizes können nicht (so (column) LIKE '%(something)' halten dabei die Verwendung eines Index auf Spalte) verwendet werden, die Ergebnisse werden neigen in der Tabelle zu sein, die, Wenn Sie die Tabelle nicht manuell neu geordnet haben, wird die Reihenfolge angezeigt, in der sie der Tabelle hinzugefügt wurden.

Wenn ein Index verwendet werden kann (zum Beispiel so etwas wie (column) LIKE '(something)%' auf einer indizierten Spalte zu tun), das Ergebnis in der Reihenfolge des Index zurückkommen kann.

Das Hinzufügen von Joins zu anderen Tabellen macht es noch unbestimmter, da Sie auch bei den Indizes, die für die Join-Bedingung verwendet werden, keine Ahnung haben.