Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Gute Idee/Schlechte Idee? Verwenden Sie MySQL RAND() außerhalb einer kleinen Gruppe von Unterabfrageergebnissen?

Eigentlich ... habe ich einen Test durchgeführt und vielleicht meine eigene Frage beantwortet. Ich dachte, ich würde diese Informationen hier posten, falls sie für jemand anderen nützlich sind. (Wenn ich hier etwas falsch gemacht habe, lass es mich bitte wissen!)

Das ist irgendwie überraschend...

Im Gegensatz zu allem, was ich gelesen habe, habe ich eine Tabelle namens TestData mit 1 Million Zeilen erstellt und die folgende Abfrage ausgeführt:

SELECT * FROM TestData WHERE number =41 ORDER BY RAND() LIMIT 8

...und es gab die Zeilen in durchschnittlich 0,0070 Sekunden zurück. Ich verstehe nicht wirklich, warum RAND() einen so schlechten Ruf hat. Es scheint mir ziemlich brauchbar, zumindest in dieser speziellen Situation.

Ich habe drei Spalten in meiner Tabelle:

id [BIGINT(20)] | Textfeld [winziger Text] | Zahl [BIGINT(20)]

Primärschlüssel auf ID, Index auf Nummer.

Ich denke, MySQL ist schlau genug zu wissen, dass es RAND() nur auf die 20 Zeilen anwenden sollte, die von "WHERE number =41" zurückgegeben werden. (Ich habe ausdrücklich nur 20 Zeilen hinzugefügt, die den Wert 41 für „Nummer“ hatten.)

Die alternative Unterabfragemethode gibt Ergebnisse mit einer durchschnittlichen Zeit von etwa 0,0080 Sekunden zurück, was langsamer ist als die Nicht-Unterabfragemethode.

Unterabfragemethode:SELECT * FROM (SELECT * FROM TestData WHERE number =41) as t ORDER BY RAND() LIMIT 8