He mirado alrededor y no parece haber ninguna manera fácil de hacerlo. Casi parece que es más fácil simplemente capturar un subconjunto de registros y hacer toda la asignación al azar en el código (perl). Los métodos que he visto en línea parecen estar más orientados a cientos de miles, pero ciertamente no a millones.Seleccione rápidamente ID aleatorio de la tabla mysql con millones de registros no secuenciales
La tabla con la que estoy trabajando tiene 6 millones de registros (y sigue creciendo), los ID se incrementan automáticamente, pero no siempre se almacenan en la tabla (sin gapless).
He intentado hacer la consulta LIMIT 1 que se ha recomendado, pero la consulta tarda mucho en ejecutarse: ¿hay una forma rápida de hacerlo, dado que hay lagunas en el registro? No puedo tomar el máximo y aleatorizar sobre el rango.
Actualización:
Una idea que tenía tal vez era para agarrar el máximo, de forma aleatoria un límite basado en el máximo, y luego tomar un alcance de 10 registros de random_limit_1 a random_limit_2 y después de tomar el primer registro encontrado en ese rango
O si conozco el máximo, ¿hay alguna manera de que pueda elegir decir el 5to registro de la tabla, sin tener que saber qué ID es? Entonces solo agarrando la identificación de ese registro.
Actualización:
Esta consulta es algo más rápido-ish. Todavía no lo suficientemente rápido =/
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
¿Qué quiere decir con 'non-gapless'? Que hay lagunas? –
Sí. exactamente eso =] – qodeninja
bastante seguro nodebunny significa un índice de autoincrement típico que ha tenido algunas filas borradas en el pasado ... –