Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Query demora demasiado

Estas en el tema de Query demora demasiado en el foro de Mysql en Foros del Web. Hola, tengo la siguiente query que funciona ok. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT deviceID , timestamp   FROM EventData WHERE accountID = '118901F' ...
  #1 (permalink)  
Antiguo 01/02/2013, 12:00
 
Fecha de Ingreso: mayo-2011
Mensajes: 102
Antigüedad: 13 años, 6 meses
Puntos: 0
Query demora demasiado

Hola, tengo la siguiente query que funciona ok.

Código MySQL:
Ver original
  1. SELECT deviceID,timestamp
  2.  FROM EventData WHERE accountID='118901F' AND deviceID IN('CPP913','JJT385') AND timestamp>(unix_timestamp(now()-interval 10 minute));

accountID,deviceID, timestamp son primary key.

Sin embargo cuando cambio el filtro de timestamp a creationTime demora una eternidad.

Código MySQL:
Ver original
  1. SELECT deviceID,timestamp
  2.  FROM EventData WHERE accountID='118901F' AND deviceID IN('CPP913','JJT385') AND creationTime>(unix_timestamp(now()-interval 10 minute));

Actualmente hay mas de 26 millones de registros en esa tabla pero puede llegar a mas de 100 millones.

¿Existe alguna forma de optimizar esta query?
¿Debería hacerla de otra manera?
  #2 (permalink)  
Antiguo 03/02/2013, 06:25
 
Fecha de Ingreso: octubre-2008
Mensajes: 127
Antigüedad: 16 años, 1 mes
Puntos: 5
Respuesta: Query demora demasiado

Hola,

tienes indexados esos campos?

Saludos.
  #3 (permalink)  
Antiguo 04/02/2013, 06:33
 
Fecha de Ingreso: mayo-2011
Mensajes: 102
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Query demora demasiado

Si con indexar te refieres a primary key, están indexados todos los campos que uso en el WHERE excepto creationTime, ahí es cuando el motor MySQL se atora.

Básicamente no procesa otros SELECT hasta que termina con las querys que postee.

¿Será que habrá alguna forma de que no se detengan el resto de las querys?

Otro dato, esa tabla es muy activa, ademas de muy grande, y cambia constantemente varias veces por segundo.
  #4 (permalink)  
Antiguo 04/02/2013, 09:45
 
Fecha de Ingreso: noviembre-2012
Ubicación: Caracas - Venezuela
Mensajes: 116
Antigüedad: 12 años
Puntos: 1
Respuesta: Query demora demasiado

utiliza inner join es mas facil de procesar que plano carteciano
  #5 (permalink)  
Antiguo 04/02/2013, 11:21
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Query demora demasiado

E_Blue,
no sé por qué restas ese dato así, ni siquiera en la primera consulta que dices que te funciona bien.
A un UNIX_TIMESTAMP de fechahora actual le restas 10 minutos. El resultado son segundos desde '1970-01-01 00:00:00' hasta ese momento, y el filtro trabaja sobre un timestamp en tu primera consulta, un timestamp. Dinos la razón de las dos consultas tal cual. Qué es lo que quieres buscar por lo que a la fecha hora se refiere... Así podremos ayudarte mejor.
  #6 (permalink)  
Antiguo 04/02/2013, 11:34
 
Fecha de Ingreso: mayo-2011
Mensajes: 102
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Query demora demasiado

angelsds, gracias por responder, nunca use inner joins, voy a leer un poco a ver como es el tema.

jurena, gracias por responder, en esa tabla tengo eventos que se van guardando de alarmas de clientes que tienen un dispositivo que se reporta a el servidor de la empresa para la que trabajo; en timestamp se guarda la fecha (UNIX) en la que se creo el reporte y en creationTime la fecha(UNIX) en la que el reporte llego al server.

El problema es que necesito "ver" los reportes de los últimos 10 minutos, por orden de llegada a la base(creationTime), no por fecha de creación(timestamp) pues suele pasar que hay reportes que llegan tarde porque no pudieron ser enviados en el momento en el que se generaron en el dispositivo remoto, quedan en memoria y son enviados al server mas tarde, es decir, llegan desordenados(timestamp).

Por lo tanto si ordeno por timestamp muchos eventos pueden perderse, por eso necesito ordenarlos por creationTime.
  #7 (permalink)  
Antiguo 04/02/2013, 12:05
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Query demora demasiado

Si guardas en los dos campos UNIX de un timestamp, guardas un dato numérico. ¿Es así? ¿No puedes crear un índice para ese campo creationTime, digo un índice de tipo normal?
  #8 (permalink)  
Antiguo 04/02/2013, 12:15
 
Fecha de Ingreso: mayo-2011
Mensajes: 102
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Query demora demasiado

Los únicos indices que conozco son los primary key, ahora mismo estoy leyendo sobre los indices que me comentas, no sabia de su existencia.
  #9 (permalink)  
Antiguo 04/02/2013, 13:18
 
Fecha de Ingreso: mayo-2011
Mensajes: 102
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Query demora demasiado

Bueno, quise crear el indice en base a creationTime y a los 5 minutos me da error, me dice...


ERROR 2013: Lost connection to MySQL server during query
SQL Statement:
ALTER TABLE `base1`.`EventData`
ADD INDEX `creationTimeIndex` USING BTREE (`creationTime` DESC)
ERROR: Error when running failback script. Details follow.
ERROR 2006: MySQL server has gone away

Lo intente 2 veces, con el mismo resultado.
  #10 (permalink)  
Antiguo 04/02/2013, 13:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Query demora demasiado

¿Qué motor de tablas usas, MyIsam o InnoDB? ¿Ese campo creationTime es Foreign Key en alguna otra tabla?
Por otra parte, un proceso de indexado de 26 millones de registros no es algo rápido, imagino, y probablemente el servidor tiene un límite para un operación como esta en vivo. ¿Desde dónde llevas a cabo la acción, desde consola, desde PHPMyAdmin, con un script PHP...?
  #11 (permalink)  
Antiguo 05/02/2013, 06:32
 
Fecha de Ingreso: mayo-2011
Mensajes: 102
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Query demora demasiado

La tabla es MyISAM.
El indice lo creo desde MySQL Workbench.

La base no la cree yo, pero creo que creationTime no es Foreing key
  #12 (permalink)  
Antiguo 05/02/2013, 10:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Query demora demasiado

E_Blue,
El problema es complejo. Lee aquí y verás las respuestas.
http://stackoverflow.com/questions/3...-18-hours-or-f
  #13 (permalink)  
Antiguo 05/02/2013, 13:47
 
Fecha de Ingreso: mayo-2011
Mensajes: 102
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Query demora demasiado

Gracias por la info, ya estoy leyéndola, y por lo poco que leí hasta ahora puede ser, en parte, problema de configuración de la base y/o el motor MySQL.

Etiquetas: demasiado, demora, query, registros, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:07.