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

mysql order by rand() výkonnostní problém a řešení

Za prvé, všechny generují náhodnou hodnotu od 1 do MAX(id), nikoli 100000000.

Pak existuje alespoň několik dobrých řešení:

  1. Použijte > ne =

    SELECT items FROM tablea where status='0' and id>'$id23' LIMIT 1
    

    Vytvořte index na (status,id,items) aby se tento dotaz stal pouze indexem.

  2. Použijte = , ale zkuste to znovu s jinou náhodnou hodnotou, pokud nenajdete zásah. Někdy to bude trvat několik pokusů, ale často to bude trvat jen jeden pokus. = by měl být rychlejší, protože může používat primární klíč. A pokud je rychlejší a zvládne to na jeden pokus 90 % času, mohlo by to vynahradit zbývajících 10 % času, kdy to trvá více než jeden pokus. Záleží na tom, kolik mezer máte v hodnotách id.



  1. varbinary na řetězec na SQL Server

  2. Co je nového v MariaDB Cluster 10.4

  3. Jak zkompilovat všechny neplatné balíčky ve schématu?

  4. Jak nasadit MariaDB Cluster 10.5 pro vysokou dostupnost