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

mysql order by rand() problema di prestazioni e soluzione

Prima di tutto, tutti generano un valore casuale da 1 a MAX(id), non 100000000.

Poi ci sono almeno un paio di buone soluzioni:

  1. Usa > non =

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

    Crea un indice su (status,id,items) per rendere questa una query di solo indice.

  2. Usa = , ma riprova con un valore casuale diverso se non trovi un risultato. A volte ci vorranno diversi tentativi, ma spesso ci vorrà solo un tentativo. Il = dovrebbe essere più veloce poiché può utilizzare la chiave primaria. E se è più veloce e lo ottiene in un tentativo il 90% delle volte, ciò potrebbe compensare l'altro 10% delle volte quando ci vuole più di un tentativo. Dipende da quante lacune hai nei tuoi valori id.