Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL seleziona una riga casuale con JOIN da due tabelle

È lo smistamento che ti sta rallentando. Invece di ordinare in modo casuale, seleziona un product_db.unique_id casuale

Nella tua query, sostituisci ORDER BY RAND() con:

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

usando >= invece di = nel caso in cui unique_id sia stato eliminato dal database. Non è un risultato casuale come l'ordinamento per rand, ma la query verrà eseguita molto più velocemente. Se lo desideri, puoi eseguire più query con = fino a quando non viene trovato un risultato e potrebbe essere comunque molto più veloce dell'ordinamento di tutti quei risultati.

Con un JOIN esplicito sarebbe:

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