 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 21 Dic, 2012 11:59 am Asunto: Consulta muyyy lenta |
|
|
Estoy adaptando un programa de tablas Paradox a Firebird 2.5 y me estoy volviendo loco. Tengo esta consulta:
| Código: | SELECT A.Apellidos, A.Nombre, A.Registro, A.CodPrv, A.Nif, A.F_nacim, A.Sexo, A.Correo,
A.Domicilio, A.Cpostal, A.Tlf_part, A.Tlf_prof, A.Tlf_movil, A.C_electronico, A.F_pago,
A.Periodo, A.Referencia, A.Cuota, A.Cuenta, A.Observaciones, A.Situacion, A.N_afiliado,
A.Lo1599, A.F_alta, A.F_baja, A.M_baja, A.Municipio, B.Nombre Poblacion, A.Profesion CodProf,
C.Nombre, A.Provincia CodProv, D.Nombre, A.Afiliacion CodAfi, E.Nombre, A.Junta, F.Nombre NomJunta, G.Literal
FROM Personas A LEFT JOIN Municipio B ON A.CodPrv = B.CodPrv AND A.Municipio = B.Registro,
Tablas C, Tablas D, Tablas E, Tablas F, Instalacion G
WHERE C.Tabla = 'PR' AND A.CodPrv = C.CodPrv AND A.Profesion = C.Codigo
AND D.Tabla = 'PV' AND A.CodPrv = D.CodPrv AND A.Provincia = D.Codigo
AND E.Tabla = 'AF' AND A.CodPRv = E.CodPrv AND A.Afiliacion = E.Codigo
AND F.Tabla = 'PB' AND A.CodPrv = F.CodPrv AND A.Junta = F.Codigo
AND G.Etiqueta = 'Situacion' AND A.Situacion = G.Orden
AND A.CodPrv = 45 AND A.Registro = 10230 |
Las tablas más grandes son las dos primeras: Personas (19427 regs.) y Municipio (58657 regs).
Si lo ejecuto tal como lo he puesto tarda más de 2 minutos en sacar resultados; si en lugar del LEFT JOIN me lleva la condición ON al WHERE tarda unos 35 segundos, pero si quito LEFT JOIN corro el riesgo de no scar ningún resultado si el código de municipio ha sido borrado. ¿Alguien puede darme una idea para aligerar la consulta? _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
Luis Anibal Lt


Registrado: 12 Nov 2002Mensajes: 84Ubicación: Santiago del Estero, Argentina
|
Publicado: Jue 03 Ene, 2013 3:23 am Asunto: |
|
|
Angel,
Has probado usar LEFT JOIN con tus "Tablas" C, D, E, F y G ?
Quedaria algo asi ...
| Código: | SELECT A.Apellidos, A.Nombre, A.Registro, A.CodPrv, A.Nif, A.F_nacim, A.Sexo, A.Correo,
A.Domicilio, A.Cpostal, A.Tlf_part, A.Tlf_prof, A.Tlf_movil, A.C_electronico, A.F_pago,
A.Periodo, A.Referencia, A.Cuota, A.Cuenta, A.Observaciones, A.Situacion, A.N_afiliado,
A.Lo1599, A.F_alta, A.F_baja, A.M_baja, A.Municipio, B.Nombre Poblacion, A.Profesion CodProf,
C.Nombre, A.Provincia CodProv, D.Nombre, A.Afiliacion CodAfi, E.Nombre, A.Junta, F.Nombre NomJunta, G.Literal
FROM Personas A
LEFT JOIN Municipio B ON A.CodPrv = B.CodPrv AND A.Municipio = B.Registro,
LEFT JOIN Tablas C ON C.Tabla = 'PR' AND A.CodPrv = C.CodPrv AND A.Profesion = C.Codigo
LEFT JOIN Tablas D ON D.Tabla = 'PV' AND A.CodPrv = D.CodPrv AND A.Provincia = D.Codigo
LEFT JOIN Tablas E ON E.Tabla = 'AF' AND A.CodPRv = E.CodPrv AND A.Afiliacion = E.Codigo
LEFT JOIN Tablas F ON F.Tabla = 'PB' AND A.CodPrv = F.CodPrv AND A.Junta = F.Codigo
LEFT JOIN Instalacion G ON G.Etiqueta = 'Situacion' AND A.Situacion = G.Orden
WHERE A.CodPrv = 45 AND A.Registro = 10230 |
Por supuesto, es deseable que "Tabla" tenga un indice por CodPrv y/o Codigo, lo mismo que "Municipio".
Saludos.  _________________ Luis Anibal Mendez
Analisis, Programacion, Asesoramiento
luisanibalmendez@gmail.com |
|
| Volver arriba |
|
 |
Luis Anibal Lt


Registrado: 12 Nov 2002Mensajes: 84Ubicación: Santiago del Estero, Argentina
|
Publicado: Jue 03 Ene, 2013 3:28 am Asunto: |
|
|
Angel,
Si estas usando Firebird, otra alternativa que puedes intentar es crear VIEWS de tu "Tabla" y convertirla en varias vistas, a saber:TablaPR, TablaPV, TablaAF, TablaPB.
Obviamente, indicando el criterio de seleccion en la clausula WHERE dentro del VIEW (Tabla = 'PR' y asi).
Saludos. _________________ Luis Anibal Mendez
Analisis, Programacion, Asesoramiento
luisanibalmendez@gmail.com |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|