Optimierung der ORDER BY RAND()-Leistung von MySQL
Bei der Optimierung von MySQL-Abfragen kann es sinnvoll sein, langsame Abfragen zu berücksichtigen, die die ORDER BY RAND()-Funktion enthalten herausfordernd. In diesem Artikel werden effektive Lösungen zur Verbesserung der Leistung solcher Abfragen untersucht.
Ein gängiger Ansatz besteht darin, eine Unterabfrage zu verwenden, die den Rang jeder Zeile basierend auf einem Zufallswert berechnet. Dies ermöglicht eine effiziente Auswahl zufälliger Zeilen, ohne dass eine tatsächliche Sortierung erforderlich ist.
SELECT * FROM ( SELECT @cnt := COUNT(*) + 1, @lim := 10 FROM t_random ) vars STRAIGHT_JOIN ( SELECT r.*, @lim := @lim - 1 FROM t_random r WHERE (@cnt := @cnt - 1) AND RAND(20090301) < @lim / @cnt ) i
Diese Methode ist besonders effizient für MyISAM-Tabellen, bietet aber auch erhebliche Leistungsverbesserungen in InnoDB.
Für die Auswahl von a Für einen einzelnen Zufallsdatensatz kann ein alternativer Ansatz verwendet werden:
SELECT aco.* FROM ( SELECT minid + FLOOR((maxid - minid) * RAND()) AS randid FROM ( SELECT MAX(ac_id) AS maxid, MIN(ac_id) AS minid FROM accomodation ) q ) q2 JOIN accomodation aco ON aco.ac_id = COALESCE ( ( SELECT accomodation.ac_id FROM accomodation WHERE ac_id > randid AND ac_status != 'draft' AND ac_images != 'b:0;' AND NOT EXISTS ( SELECT NULL FROM accomodation_category WHERE acat_id = ac_category AND acat_slug = 'vendeglatohely' ) ORDER BY ac_id LIMIT 1 ), ( SELECT accomodation.ac_id FROM accomodation WHERE ac_status != 'draft' AND ac_images != 'b:0;' AND NOT EXISTS ( SELECT NULL FROM accomodation_category WHERE acat_id = ac_category AND acat_slug = 'vendeglatohely' ) ORDER BY ac_id LIMIT 1 ) )
Dieser Ansatz geht von einer relativ gleichmäßigen Verteilung der ac_id-Werte aus. Durch den Einsatz dieser Techniken können Sie MySQL-Abfragen mit ORDER BY RAND() erheblich optimieren.
Das obige ist der detaillierte Inhalt vonWie kann ich MySQLs ORDER BY RAND() für eine bessere Leistung optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!