Quindi ho una tabella con oltre 80.000 record, questo è chiamato sistema. Ho anche un altro tavolo chiamato segue.Ottimizzazione della mia istruzione mysql! - RAND() TOO SLOW
Ho bisogno che la mia istruzione selezioni casualmente i record dalla tabella di sistema, dove quell'id non è già elencato nella tabella seguente sotto l'id utente corrente.
Così qui è quello che ho:
SELECT system.id,
system.username,
system.password,
system.followed,
system.isvalid,
follows.userid,
follows.systemid
FROM system
LEFT JOIN follows ON system.id = follows.systemid
AND follows.userid = 2
WHERE system.followed = 0
AND system.isvalid = 1
AND follows.systemid IS NULL
ORDER BY RAND()
LIMIT 200
Ora wotks perfettamente, se non che ci vuole circa un minuto intero prima che possa anche iniziare l'elaborazione del lavoro a portata di mano con i record essa scelto. A questo punto la sceneggiatura di solito dura e non succede nulla.
Qualcuno può mostrarmi come rielaborare questo, quindi la stessa idea è stata fatta, ma non sta usando l'ordine di Rand? Questo sembra rallentare le cose un bel po '.
Grazie!
Quali indici hai nei tuoi campi JOIN? Quello può essere un grande collo di bottiglia. – dnagirl
Non sono troppo sicuro di cosa intendi ... – Brandon
@Brandon so che è un po 'tardi per questo, ma se ti piacerebbe un modo semi-semplicistico di farlo puoi semplicemente metterlo in una subquery ... vedi la mia risposta qui per maggiori dettagli http://stackoverflow.com/questions/25361158/mysql-select-random-on-large-table-order-by-score/25364339?noredirect=1#comment39644652_25364339 –