/ / Funktioniert diese Abfrage wie erwartet? - MySQL, Datenbank

Funktioniert diese Abfrage wie erwartet? - MySQL, Datenbank

Ich habe eine MySQL-Tabelle mit nur einer Spalte, die Spalte hat einige Wörter mit 3 Buchstaben und einige Wörter mit 4 Buchstaben sowie einige Wörter mit 5 und 6 Buchstaben.

Ich möchte, dass eine Abfrage zuerst zufällig aus allen 3-Buchstaben-Wörtern ausgewählt wird, wenn alle weg sind, und dann mit 4-Buchstaben-Wörtern fortfahren.

Das ist meine Frage:

SELECT `word` FROM `words` ORDER BY LENGTH(`word`) ASC, RAND() LIMIT 1

Das funktioniert wie erwartet in den wenigen Versuchen, die ich bisher versucht habe, aber ich möchte sichergehen, dass es immer so funktioniert.

Antworten:

2 für die Antwort № 1

Ihre Abfrage sieht für mich gut aus, aber ich hoffe, dass die Tabelle klein ist, da MySQL jedes Mal alle Zeilen durchsucht und dann filesort verwendet, um eine einzige Zeile zurückzugeben.

Hinzufügen eines wordlength Spalte und Indizierung verbessert die Abfrage nicht, da die ORDER BY RAND() Funktion würde die Verwendung des Indexes ungültig machen.

Erwägen Sie, die Wörter in getrennte Teile aufzuteilenJe nach Länge der Tabellen werden mindestens alle Zeilen nach Wörtern mit derselben Länge durchsucht. Wählen Sie zuerst die Tabelle Three_letter_words aus, und wenn keine Ergebnisse vorhanden sind, wählen Sie die Tabelle Four_letter_words usw. aus.