sql >> Databáze >  >> RDS >> Mysql

MySQL vybere náhodný řádek s JOIN ze dvou tabulek

Je to řazení, které vás zpomaluje. Místo náhodného řazení stačí vybrat náhodné product_db.unique_id

Ve svém dotazu nahraďte ORDER BY RAND() s:

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

pomocí >= místo = v případě, že byl jedinečný_id odstraněn z databáze. Není to tak náhodný výsledek jako řazení podle randu, ale dotaz se provede mnohem rychleji. Pokud chcete, můžete spustit více dotazů pomocí = dokud není nalezen výsledek, a stále to může být docela rychlejší než řazení všech těchto výsledků.

S explicitním JOIN by to bylo:

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. MySQL:jedinečné pole musí být index?

  2. Jak napsat dotaz MySQL Join

  3. Jak se správně vyhnout Mysql Race Conditions

  4. Dynamické maskování dat v SQL Server pro začátečníky