Heim >Datenbank >MySQL-Tutorial >Wie kann ich effizient mehrere Zufallszeilen aus MySQL abrufen, ohne ORDER BY RAND() zu verwenden?
Entdecken Sie Alternativen, um mehrere Zufallsergebnisse zu erhalten
Obwohl die ORDER BY RAND()-Funktion von MySQL eine Methode zum direkten Erhalten zufälliger Ergebnisse bereitstellt, ist sie nicht in der Lage, mehrere Zeilen zufälliger Daten effizient auszuwählen. In diesem Artikel werden alternative Techniken zur Optimierung solcher Abfragen untersucht.
Optimierungslösung: Verwendung von Indexspalten und Unterabfragen
Bei Abfragen, die nach zufälligen Ergebnissen suchen, ist die Optimierung der Leistung von entscheidender Bedeutung. Ein innovativer Ansatz, der gut funktioniert, ist die Verwendung einer Kombination aus indizierten Spalten und Unterabfragen. Diese Technik reduziert den Verarbeitungsaufwand erheblich, indem der Randomisierungsprozess auf bestimmte Bedingungen beschränkt wird.
Schritte:
Beispiel:
Bedenken Sie die folgende Abfrage:
<code class="language-sql">SELECT u.id, p.photo FROM users u, profiles p WHERE p.memberid = u.id AND p.photo != '' AND (u.ownership=1 OR u.stamp=1) ORDER BY RAND() LIMIT 18 </code>
Optimierte Abfrage:
<code class="language-sql">SELECT g.* FROM table g JOIN (SELECT id FROM table WHERE RAND() < (SELECT ((4 / COUNT(*)) * 10) FROM table) ORDER BY RAND() LIMIT 4) AS z ON z.id= g.id</code>
Vorteile:
Hinweis:
Diese Optimierungsmethode basiert auf der Konsistenz zwischen der Unterabfrage und der Hauptabfrage, um sicherzustellen, dass sie genaue Ergebnisse liefern. Darüber hinaus kann die Wahl angemessener Grenzwerte für den Prozentsatz der randomisierten Ergebnisse dazu beitragen, die Leistung aufrechtzuerhalten.
Das obige ist der detaillierte Inhalt vonWie kann ich effizient mehrere Zufallszeilen aus MySQL abrufen, ohne ORDER BY RAND() zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!