Crear un RAND que sea optimo cuando tenes muchos registros en la base de datos. Ya que el ejemplo tiplico que esta por todos lados cuando tenes una base de datos muy grande pierder performan.
Ejemplo tipico de una fila aleatoria QUE NO ES OPTIMO:
- “SELECT * FROM producto ORDER BY rand(” . time() . ” * ” . time() . “) LIMIT 3″;
- # O este otro ejemplo
- “SELECT * FROM producto ORDER BY rand() LIMIT 3″;
Ejemplo 1: Tiene mejor rendimiento cuando tenes muchos mas datos "ES OPTIMO".
- SELECT
- RAND() as aleatorio,
- producto.*
- FROM
- producto
- WHERE
- producto.id < (SELECT ABS(FLOOR(MAX(producto.id)/RAND((CAST(SECOND(NOW())AS UNSIGNED)+1)/RAND()))) FROM producto LIMIT 1)
- ORDER BY aleatorio
- LIMIT 3
- SELECT
- RAND() as aleatorio,
- P.*
- FROM producto P
- JOIN (SELECT ABS(FLOOR(MAX(producto.id)/RAND((CAST(SECOND(NOW())AS UNSIGNED)+1)/RAND()))) AS ID FROM producto LIMIT 1) AS x ON P.id < x.ID
- ORDER BY aleatorio
- LIMIT 3;
- SELECT * FROM
- (SELECT RAND() as aleatorio, producto.* FROM producto WHERE productoid like '%' LIMIT 100) AS P
- ORDER BY P.aleatorio
- LIMIT 3
Ejemplo 3.B: Si queres tener mejor performan en el "Ejemplo 3.A"; no tenes que llamar a todos los campos " producto.* " solo a los que necesitas.
- SELECT * FROM
- (SELECT RAND() as aleatorio, productoid, marca, nombre FROM producto WHERE productoid like '%' LIMIT 100) AS P
- ORDER BY P.aleatorio
- LIMIT 3
No hay comentarios:
Publicar un comentario