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

Consulta: Optimizar tiempo de respuesta

Estas en el tema de Consulta: Optimizar tiempo de respuesta en el foro de Mysql en Foros del Web. Saludos a todos! Tengo un problema que espero me den alternativas de solución. Debo registrar las llamadas que hacen los cllientes a una central telefonica, ...
  #1 (permalink)  
Antiguo 19/02/2007, 10:48
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 19 años, 3 meses
Puntos: 1
Consulta: Optimizar tiempo de respuesta

Saludos a todos!
Tengo un problema que espero me den alternativas de solución.

Debo registrar las llamadas que hacen los cllientes a una central telefonica, inicialmente se registraban entre 12 a 15 llamadas diarias, ahora esta cantidad se ha duplicado, por lo cual se hace mas pesada la consulta, y en los proximos 2 meses habra otro incremento similar. Actualmente cuento con 4700 registros aprox. y ya noto cierta lentitud al mostrar los resultados de las consultas.

Las tablas estan indexadas por los campos a los que se hace referencia en las consultas. Inicialmente mostraba las llamadas de todos los meses, ahora he hecho un filtro para que solo me muestre las llamadas del mes en curso y un combo para que se seleccione el mes y año si es que se quiere ver las llamadas de meses anteriores, ¿esto en que ayuda a agilizar la consulta y mostrar los resultados en pantalla? ¿debería guardar las llamadas de meses anteriores en otra tabla? ¿Alguna sugerencia o información adicional que deba meniconar?
La versión de MySQL es 4.1.21 y de PHP 4.4.4.

Gracias de antemano.
__________________
:adios:
  #2 (permalink)  
Antiguo 19/02/2007, 11:11
Avatar de deadlykyo  
Fecha de Ingreso: noviembre-2005
Ubicación: Cbba - Bolivia
Mensajes: 747
Antigüedad: 18 años, 5 meses
Puntos: 5
Re: Consulta: Optimizar tiempo de respuesta

Creo que para tener una idea mas clara de como realizas tus consultas, podrias poner las estructuras de tus tablas y las consultas que haces, saludos, cya
__________________
"El Conocimiento es de todos, no solo de algunos"
  #3 (permalink)  
Antiguo 19/02/2007, 15:36
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 19 años, 3 meses
Puntos: 1
Re: Consulta: Optimizar tiempo de respuesta

Esta es la estructura de las tablas

Llamada (4654 reg)
Código:
+------------+-------------+------+-----+------------+----------------+
| Field      | Type        | Null | Key | Default    | Extra          |
+------------+-------------+------+-----+------------+----------------+
| idhelp     | int(4)      |      | PRI |            | auto_increment |
| idcomercio | varchar(5)  |      | MUL |            |                |
| codigo     | varchar(8)  |      |     |            |                |
| nroticket  | varchar(10) |      |     |            |                |
| codaveria  | varchar(10) |      |     |            |                |
| contacto   | varchar(30) |      |     |            |                |
| probid     | varchar(6)  |      | MUL |            |                |
| idprob     | varchar(6)  |      | MUL |            |                |
| reporte    | blob        |      |     |            |                |
| fecha      | date        |      |     | 0000-00-00 |                |
| hora       | time        |      |     | 00:00:00   |                |
| idempleado | char(2)     |      | MUL |            |                |
| estado     | char(2)     |      |     |            |                |
| sol        | char(2)     | YES  |     | NULL       |                |
+------------+-------------+------+-----+------------+----------------+
Comercio (650 reg)
Código:
+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| idcomercio   | int(5)      |      | PRI | NULL    | auto_increment |
| codigo       | varchar(5)  | YES  |     | 0       |                |
| nombre       | varchar(50) |      |     |         |                |
| direccion    | varchar(80) |      |     |         |                |
| distrito     | varchar(40) |      |     |         |                |
| provincia    | varchar(40) |      |     |         |                |
| departamento | varchar(40) |      |     |         |                |
| telefono     | varchar(30) |      |     |         |                |
| contacto     | varchar(60) |      |     |         |                |
| tequipo      | varchar(15) |      |     |         |                |
| estado       | char(1)     |      |     |         |                |
| finicio      | date        | YES  |     | NULL    |                |
| fretiro      | date        | YES  |     | NULL    |                |
| comentario   | tinyblob    | YES  |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+
Instalacion (674 reg)
Código:
+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| inst         | int(11)     |      | PRI | NULL    | auto_increment |
| idinst       | int(11)     |      |     | 0       |                |
| sec          | varchar(5)  |      |     |         |                |
| idcomercio   | varchar(5)  |      | MUL |         |                |
| idempleado   | varchar(8)  |      | MUL |         |                |
| respname     | varchar(80) | YES  |     | NULL    |                |
| codinstal    | varchar(10) |      |     |         |                |
| prodmodelid  | char(3)     |      |     |         |                |
| prodtypeid   | char(3)     |      |     |         |                |
| nroserie     | varchar(15) | YES  |     | NULL    |                |
| inventario   | varchar(15) | YES  |     | NULL    |                |
| prodmodelid2 | char(3)     |      |     |         |                |
| prodtypeid2  | char(3)     |      |     |         |                |
| nroserie2    | varchar(15) |      |     |         |                |
| inventario2  | varchar(15) |      |     |         |                |
| observacion  | blob        |      |     |         |                |
| fecha        | date        | YES  |     | NULL    |                |
| h_inicio     | time        | YES  |     | NULL    |                |
| h_fin        | time        | YES  |     | NULL    |                |
| estado       | char(1)     |      |     |         |                |
| codaveria    | varchar(10) | YES  |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+
Empleado (34 reg)
Código:
+-----------------+--------------+------+-----+---------------------+-------+
| Field           | Type         | Null | Key | Default             | Extra |
+-----------------+--------------+------+-----+---------------------+-------+
| IdEmpleado      | int(11)      |      | PRI | 0                   |       |
| codigo          | varchar(10)  |      |     |                     |       |
| Nombres         | varchar(50)  | YES  |     | NULL                |       |
| ApellidoPaterno | varchar(50)  | YES  |     | NULL                |       |
| ApellidoMaterno | varchar(50)  | YES  |     | NULL                |       |
| Direccion       | varchar(150) | YES  |     | NULL                |       |
| Telefono        | varchar(50)  | YES  |     | NULL                |       |
| Celular         | varchar(50)  | YES  |     | NULL                |       |
| email           | varchar(50)  |      |     |                     |       |
| IdCargo         | int(11)      | YES  |     | NULL                |       |
| StoreCode       | varchar(9)   | YES  |     | NULL                |       |
| fecha           | datetime     |      |     | 0000-00-00 00:00:00 |       |
| estado          | tinyint(4)   |      |     | 0                   |       |
+-----------------+--------------+------+-----+---------------------+-------+
Problema (10 reg)
Código:
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| idprob      | varchar(5)  |      | PRI |         |       |
| descripcion | varchar(60) |      |     |         |       |
| codigo      | varchar(11) |      |     |         |       |
+-------------+-------------+------+-----+---------+-------+
Det Problema (137 reg)
Código:
+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| probid       | int(11)      |      | PRI | 0       |       |
| probdetail   | varchar(80)  |      |     |         |       |
| probdetailid | varchar(5)   |      |     |         |       |
| codigo       | varchar(15)  | YES  |     | NULL    |       |
| categoria    | varchar(50)  |      |     |         |       |
| probcomments | varchar(200) |      |     |         |       |
| state        | tinyint(1)   |      |     | 0       |       |
+--------------+--------------+------+-----+---------+-------+
Y esta es la consulta:
Código:
SELECT 	h.*,
	c1.Nombres nombre, c1.codigo codigoe,  
	c2.nombre loca, c2.tequipo equipo, c2.codigo,  c2.distrito, c2.departamento, c2.direccion, c2.telefono,
	c6.estado,
	c7.probdetail, c7.codigo code, c7.categoria cat, 
	c8.descripcion

from llamada h , 
     	empleado c1, 
	comercio c2, 
	instalacion c3 , 
	h_desk_es c6, 
	detproblema c7, 
	problema c8 

where 	(h.idempleado = c1.IdEmpleado)
	and (h.idcomercio = c2.idcomercio and c2.idcomercio = c3.idcomercio) 
	and (h.estado= c6.id_hdeskes) 
	and (h.probid= c7.probid) 
	and (h.idprob= c8.idprob) 
	and (h.fecha >= '2007-02-01' and h.fecha <= '2007-02-31')

group by h.idhelp

order by h.idhelp desc
Asi es la estructura, recibo ayuda, criticas, consejos, de todo.
Muchas gracias.
__________________
:adios:
  #4 (permalink)  
Antiguo 19/02/2007, 20:02
Avatar de deadlykyo  
Fecha de Ingreso: noviembre-2005
Ubicación: Cbba - Bolivia
Mensajes: 747
Antigüedad: 18 años, 5 meses
Puntos: 5
Re: Consulta: Optimizar tiempo de respuesta

Bueno lo que podria aportar para mejorar el tiempo de respuesta de tu consulta, es que hagas uso de los JOINS (INNER JOIN, LEFT JOIN, NATURAL JOIN,...) para tu consulta, ahi obtendras un mejor resultado ya que cuando haces join entre tablas por medio de las condiciones del where, primero generar un producto cartesiano entre las tablas y recien despues se filtran de acuerdo a las condiciones del WHERE, ya te imaginaras el tamañod del producto cartesiano de tantas tablas, seria algo asi:
Código PHP:
SELECT     h.*,
    
c1.Nombres nombrec1.codigo codigoe,  
    
c2.nombre locac2.tequipo equipoc2.codigo,  c2.distritoc2.departamentoc2.direccionc2.telefono,
    
c6.estado,
    
c7.probdetailc7.codigo codec7.categoria cat
    
c8.descripcion

FROM 
llamada h INNER JOIN 
(empleado c1,comercio c2,instalacion c3,h_desk_es c6,detproblema c7,problema c8 )  
ON (h.idempleado c1.IdEmpleado AND h.idcomercio c2.idcomercio AND
c2.idcomercio c3.idcomercio  AND h.estadoc6.id_hdeskes AND h.probidc7.probid AND h.idprobc8.idprob)

WHERE h.fecha >= '2007-02-01' and h.fecha <= '2007-02-31'
GROUP BY h.idhelp
ORDER BY h
.idhelp desc 
espero no haberme equivocado en algun join, pero de todas maneras te dejo un link para mas informacion sobre el uso de JOINS, saludos, cya
http://www.mysql-hispano.org/page.php?id=31&pag=9
__________________
"El Conocimiento es de todos, no solo de algunos"
  #5 (permalink)  
Antiguo 19/02/2007, 22:57
Avatar de miglos  
Fecha de Ingreso: enero-2005
Ubicación: Perú
Mensajes: 235
Antigüedad: 19 años, 3 meses
Puntos: 1
De acuerdo Re: Consulta: Optimizar tiempo de respuesta

Muchas gracias deadlykyo por tu tiempo. Ahora mismo pondre en practica tu aporte.
Con respecto a las otras dudas, seria conveniente guardar los registros antiguos en otra tabla?

Conocen algun sitio de "mejores practicas" o algo similar para la concepción, elaboración de BBDD??

Agradezco su atención.
__________________
:adios:
  #6 (permalink)  
Antiguo 20/02/2007, 09:14
Avatar de deadlykyo  
Fecha de Ingreso: noviembre-2005
Ubicación: Cbba - Bolivia
Mensajes: 747
Antigüedad: 18 años, 5 meses
Puntos: 5
Re: Consulta: Optimizar tiempo de respuesta

Holas, bueno aparte de todo eso puedes hacer uso de las sentencias EXPLAIN y ANALYZE TABLE para ver el rendimiento de tus consultas sql, por que no lees la parte de optimizacion de consultas SELECT del manual de MySQL te ayudara bastante y tendras una mejor idea de como mejorarlas, saludos, cya
http://dev.mysql.com/doc/refman/5.0/...imization.html
__________________
"El Conocimiento es de todos, no solo de algunos"
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 19:06.