Mi sono guardato intorno e non sembra esserci un modo semplice per farlo. Sembra quasi che sia più semplice afferrare un sottoinsieme di record e fare tutto il codice casuale (perl). I metodi che ho visto online sembrano essere più orientati al massimo a centinaia di migliaia, ma certamente non a milioni.Seleziona rapidamente ID casuale dalla tabella mysql con milioni di record non sequenziali
La tabella con cui sto lavorando ha 6 milioni di record (e in crescita), gli ID sono autoincrementati, ma non sempre memorizzati nella tabella (non-gapless).
Ho provato a eseguire la query LIMIT 1 che è stata consigliata, ma la query impiega per sempre l'esecuzione - c'è un modo rapido per farlo, dato che ci sono lacune nel record? Non posso prendere il massimo e randomizzare oltre l'intervallo.
Aggiornamento:
Un'idea che avevo forse è stato quello di prendere il massimo, casuale un limite in base al massimo, e poi prendete una serie di 10 record da random_limit_1 a random_limit_2 e poi prendendo il primo record trovato in quel raggio.
Oppure, se conosco il limite massimo, c'è un modo in cui posso semplicemente dire il quinto record del tavolo, senza dover sapere quale ID è. Quindi basta prendere l'id di quel disco.
Aggiornamento:
Questa query è in qualche modo più veloce-ish. Ancora non è abbastanza veloce =/
SELECT t.id FROM table t JOIN (SELECT(FLOOR(max(id) * rand())) as maxid FROM table) as tt on t.id >= tt.maxid LIMIT 1
Cosa intendi con 'non-gapless'? Che ci sono lacune? –
Sì. esattamente that =] – qodeninja
piuttosto sicuro nodebunny significa un tipico indice di autoincremento che ha avuto alcune righe cancellate in passato ... –