MySQL - optimizar bd mysql

 
Vista:
sin imagen de perfil

optimizar bd mysql

Publicado por gustavo boekemeyer (4 intervenciones) el 16/03/2016 13:06:11
tengo dramas con la siguiente consulta demora mas de de 1 minuto y medio lo que es demasiado

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
$sql=("SELECT dpac.rut, dpac.dv,dpac.nombre_pac, dpac.ap_pat,dpac.ap_mat,
		  pr.observacion_libro, pr.nombre_profesional,pr.id_folio,pr.organo,pr.tipo_muestra,
                  pr.tipo_de_muestra1,pr.tipo_de_muestra2,
                  pr.fecha_recepcion, pr.fecha_toma_muestra,
                  pr.fecha_ing_hbv,pr.fecha_procesamiento,pr.fur,pr.diagnostico1,
                  pr.diagnostico2,pr.diagnostico3,pr.diagnostico4,pr.diagnostico5,
                  pr.diagnostico6,pr.diagnostico7,pr.biopsia1,pr.biopsia2,pr.biopsia3,
                  pr.biopsia4,pr.biopsia5,pr.biopsia6,pr.biopsia7,pr.id_administrador,pr.id_administrador_nivel2,
				          tec.nombre, 
                  prev.nombre_prev, t_pap.tipo_pap, 
                  ss.nombre_serv_salud,  
                  con.nombre_consultorio,am.nombre_amenorrea,
                  ant_men.nombre_ant_menopausia,
                  aspcuello.nombre_cuello,
                  g_act.nombre_gestacion,
                  met_anticon.nombre_metodos_anticonceptivos,
                  m_examen.nombre_examen,
                  pat.nombre_patologo,
                  t_am.nombre_tipo_amenorrea,
                  trh.nombre_trh,
                  vph.nombre_vph

            FROM datos_paciente dpac, 
                 prevision prev, 
                 t_pap,
                 serv_salud ss, 
                 prestacion pr,
                 tecnologos tec,
                 consultorio con,
                 amenorrea am,
                 ant_menopausia ant_men,
                 aspcuello,
                 gestacion_actual g_act,
                 metodos_anticonceptivos met_anticon,
                 motivo_examen m_examen,
                 patologos pat,
                 tipo_amenorrea t_am,
                 trh,
                 vph

WHERE   
	dpac.rut = pr.rut
        AND dpac.dv = pr.dv
	and pr.id_pap = t_pap.id_pap
        AND pr.id_serv_salud = ss.id_serv_salud
        AND pr.codigo_con=con.codigo_con 
        AND pr.id_serv_salud= con.id_serv_salud 
        AND pr.id_tecnologo=tec.id
        AND pr.id_prevision=prev.id_prevision 
        and pr.id_amenorrea=am.id_amenorrea
        and pr.id_ant_menopausia=ant_men.id_ant_menopausia
	and pr.fecha_procesamiento between '$fecha_proc' and '$fecha_proc2'
        and aspcuello.id_cuello=pr.id_cuello
        and g_act.id_gestacion_actual=pr.id_gestacion_actual
        and met_anticon.id_metodos_aticonceptivos=pr.id_metodos_anticonceptivos
        and m_examen.id_examen=pr.id_examen
        and pat.id_patologos=pr.id_patologo
        and t_am.id_tipo_amenorrea=pr.id_tipo_amenorrea
        and trh.id_trh=pr.id_trh
        and vph.id_vph=pr.id_vph
         ")or die ("Consulta Invalida");
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

optimizar bd mysql

Publicado por Javier López (1 intervención) el 16/03/2016 17:04:44
Es una consulta muy extensa y si tienes muchos registros podría ser normal el tiempo de respuesta.

algunas posibles soluciones son:

utilizar Joins en vez de poner todas las tablas en el from
revisa que tengas indices por los campos que hacer el where ya que esto haría la vida mas fácil al servidor.


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

optimizar bd mysql

Publicado por gustavo (4 intervenciones) el 17/03/2016 12:39:56
si es verdad es larga la query pero como podria hacerla mas eficiente y que me siga trayendo la misma informacion este es el diagrama
diagrama-bd
y adjunto los 2 listados en los que tengo el problema
ojala puedan ayudarme
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 23
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

optimizar bd mysql

Publicado por Juan R. (25 intervenciones) el 18/03/2016 12:03:00
Buenas Gustavo

Tendrías que estudiar como usar los JOIN, con un JOIN natural te debería servir, es que no es lo mismo un JOIN que un producto cartesiano como haces tú.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 20
Ha disminuido su posición en 25 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

optimizar bd mysql

Publicado por Gonzalo (103 intervenciones) el 18/03/2016 19:31:00
Gustavo:

A mi entender el esquema está mal diseñado.
Usualmente un registro de prestaciones debería ser un esquema maestro-detalle, donde las prestaciones, estudios y demás acciones realizados sobre la cuenta del paciente sean parte de lo que podríamos llamar "productos de salud" que se le aplican.
Tu tabla Prestación está totalmente desnormalizada, lo que es un error grave para un TP, y catastrófico para un producto de uso en el mundo real.
Si es para un TP, al menos en mi experiencia, no lo aprobarían mis profesores. Y si fuese algo de desarrollo para la empresa que trabajo, la gente de ABD me lo rechazaría sin demasiadas explicaciones.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar