Ver Mensaje Individual
  #3 (permalink)  
Antiguo 19/04/2014, 04:33
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Como optimizar una consulta a una tabla de 5.8 millones de records?

MaBoRaK, sin entrar a valorar los datos que aportas, sino centrándome exclusivamente en la consulta que has probado y llamas 'tonta', te haré algunas preguntas y recomendaciones:
1) no uses el asterisco, salvo que quieras traerte los valores de todos los campos, y tráete solo los campos que necesites en la consulta.
2) log_id no sé qué valores tiene, es decir, qué cardinalidad tiene, para los que somos de letras cuántos distintos valores puede haber. Si son muchos, cambiaría el orden y lo pondría tras (message LIKE '%rdns%'
OR status LIKE '%rdns%') AND log_id != 0. Por otra parte, quizás te compensaría tenerlo indexado.
3) no sé por qué status es una cadena. Parecería más lógico un FKstatus (número indexado) con una tabla de status con primary key PKstatus y relacionada, pero... ya nos explicarás qué tipos de valores guardas ahí para hacer una búsqueda de ese tipo.
4) tampoco tiene mucho sentido para mí una búsqueda en esos dos campos con OR. Explícanos qué sentido tendría buscar la misma parte de cadena en ese campo message o en ese campo status.
5) Y desde luego no entiendo un ORDER BY RAND con el añadido de un uid DESC. Si ordenas ORDER BY RAND, el otro orden no te sirve, porque no podría haber, creo, coincidencia para aplicar el segundo orden. Imagino que lo que quieres es sacar el orden final descendente por uid de los 10 últimos. Yo lo haría con subconsulta luego, una vez tenga los 10 que quiero.
Dinos si vamos muy descaminados y acláranos un poco los detalles y una búsqueda realmente funcional para poner a prueba la base creada. Por otra parte, creo que no es buena idea usar ORDER BY RAND sobre una tabla con 5 millones de registros. Una posible solución sería usar PHP + MySQL para eso. Mira aquí:
http://www.tallerwebmaster.com/tutor...p-y-mysql/132/
Por otra parte, y aunque no afecta a la consulta que propones, no sé por qué no guardas la IP de otra manera, en lugar de hacerlo en un varchar 45. Si tienes que comparar, echa un vistazo aquí para considerar otras opciones de tipo de campo y de función de inserción y de selección:
http://stackoverflow.com/questions/4...sses-for-mysql

Última edición por jurena; 20/04/2014 a las 03:32