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

MySQL wählt zufällige Zeilen mit JOIN aus zwei Tabellen aus

Es ist das Sortieren, das Sie ausbremst. Anstatt nach dem Zufallsprinzip zu sortieren, wählen Sie einfach eine zufällige product_db.unique_id aus

Ersetzen Sie in Ihrer Abfrage ORDER BY RAND() mit:

AND product_db.unique_id >= ROUND(RAND()*(SELECT MAX(unique_id) FROM product_db))

mit >= statt = für den Fall, dass unique_id aus der Datenbank gelöscht wurde. Das Ergebnis ist nicht so zufällig wie das Sortieren nach Rand, aber die Abfrage wird viel schneller ausgeführt. Wenn Sie möchten, können Sie mehrere Abfragen mit = ausführen bis ein Ergebnis gefunden wird, und es kann immer noch viel schneller sein, als alle diese Ergebnisse zu sortieren.

Bei einem expliziten JOIN wäre es:

SELECT product_db.image
FROM product_db
JOIN product_page ON product_db.unique_id = product_page.product_unique_id
WHERE product_page.page_id = 3 
AND product_db.status = 'Online' 
AND product_db.unique_id >= ROUND(RAND()*(SELECT MAX(unique_id) FROM product_db))
LIMIT 1