Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL seleciona linha aleatória com JOIN de duas tabelas


É a classificação que está atrasando você. Em vez de classificar aleatoriamente, basta selecionar um product_db.unique_id aleatório

Em sua consulta, substitua ORDER BY RAND() com:
AND product_db.unique_id >= ROUND(RAND()*(SELECT MAX(unique_id) FROM product_db))

usando >= em vez de = caso esse unique_id tenha sido excluído do banco de dados. Não é um resultado tão aleatório quanto a ordenação por rand, mas a consulta será executada muito mais rapidamente. Se desejar, você pode executar várias consultas com = até que um resultado seja encontrado e ainda pode ser bem mais rápido do que classificar todos esses resultados.

Com um JOIN explícito seria:
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