sql >> Databasteknik >  >> RDS >> Mysql

MySQL välj slumpmässig rad med JOIN från två tabeller

Det är sorteringen som bromsar dig. Istället för att sortera slumpmässigt väljer du bara en slumpmässig product_db.unique_id

I din fråga, ersätt ORDER BY RAND() med:

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

med >= istället för = om det unika_id har tagits bort från databasen. Inte ett lika slumpmässigt resultat som att beställa efter rand men frågan kommer att köras mycket snabbare. Om du vill kan du köra flera frågor med = tills ett resultat hittas och det fortfarande kan vara ganska snabbare än att sortera alla dessa resultat.

Med en explicit JOIN skulle det vara:

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


  1. Applikationsanvändare kontra Row Level Security

  2. Det nya Mysqli-objektet är Null

  3. Definiera en variabel inom select och använd den inom samma select

  4. Migration främmande nyckel kontra vältaliga relationer i Laravel