![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Utiliza el IB PlanAlizer ese utilizo yo para mejorar mis consultas.
|
|
#2
|
||||
|
||||
|
Hola,
he estado mirando por encima la consulta, y hay algo que me 'cruje'. Estás utilizando tablas en la consulta que no están incluidas en ningún inner join, por lo que te debe ( en teoría según lo que tengo entendido ) devolverte más filas de las que necesitas. Ahora no me sale el nombre de esa forma de hacer una select SELECT * form TABLA1, TABLA2 -> devuelve el nº de registros de TABLA1 multiplicado por el nº de registros de TABLA2, que obviamente PUEDE que no sea el resultado que necesites. Lo normal es hacer SELECT * FROM TABLA1 T1 INNER JOIN TABLA2 T2 ON ( T1.ID=T2.ID) WHERE condiciones que devolverá los registros que existan en las dos tablas y cumplan las condiciones Espero haberte ayudado. Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
|
#3
|
||||
|
||||
|
Ya me acuerdo, el nombre de este tipo de select es producto cartesiano, que devuelve por cada registro de una tabla todos los registros de la otra.
Creo que puede ser lo que ralentiza la consulta. Haces el producto cartesiano, te devuelve tropecientos mil registros, pero al aplicar las condiciones de la where te devuelve el resultado esperado. Pero a costa de 'machacar' al servidor. Prueba poniendo INNER JOIN en todas las consultas ( que tienes unas cuantitas ) en todas las tablas que no lo tienen. Seguramente el rendimiento mejorará. Como dice guillotmarc, hazlo por separado para comparar resultados de cada select, primero tal y como la tienes y luego la versión modificada con INNER JOIN. Cuentanos los resultados... y cuando consigas que tarde un par de segundos, ya verás como los usuarios te dirán que sigue tardando mucho ( te lo digo por porpia experiencia ).Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino - |
|
#4
|
||||
|
||||
|
No me había fijado que LISTADO_REGISTRO_SERVICIOS_AMB es el primer procedimiento almacenado y no una tabla.
Esta claro que el problema lo tienes en ese procedimiento almacenado. Pues ya sabes lo que tienes que hacer, ejecutar por separado cada consulta de ese procedimiento almacenado para identificar las que van realmente lentas, y después te ayudaremos a crear los índices a optimizarlas (necesitas índices múltiples). Como dice Kipow, puedes usar programas como el IB PlanAlize para ejecutar cada una de las consultas implicadas en el procedimiento almacenado y detectar los cambios a hacer en los índices.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
|
#5
|
|||
|
|||
|
mil disculpas no pude entrar antes, pero muchas gracias por las respuestas
,disculpas pues haciendo pruebas mande el codigo del primer SP con inner join y where. Respecto al programa que me sugieren lo estoy buscando en la red para bajarlo y probarlo en lo que respecta a la sugerencia del primer compañero hice las pruebas por separado y la ejecucion es casi inmediata de los select del 2do SP. Trabajo con el ibexpert y quite todo lo que esta dentro del begin suspend y tarda como 30 seg el SP 2 es este: y cuando lo quito la parte central queda asi : (ahi me tarda promedio 20 seg) Y respecto a indices multiples como me suguieren como tendria que realizarlo??? en la tabla donde estan estos campos?? porfavor quisiera un poco de ayuda sobre los indices multiples Mil gracias |
|
#6
|
|||
|
|||
|
Nuevamente pidiendo ayuda
Muchas gracias a todos los amigos del foro con sus criterios, tengo varias consultas:
1ro.- Pedirles porfavor la direccion de donde pueda bajar el programa ib plananalyzer pues busce en la web y no encontre ningun sitio. 2do.- Me baje un programa Interbase&Firebird Development Studio con el cual como uno de los amigos del foro me dijo probar los select del primer SP por separado para ver los resultados y probe el siguiente select: y me muestra lo siguiente: PLAN JOIN (R1 NATURAL, G INDEX (PK_ECOGRAFIA), R INDEX (PK_RECIBO)) aparte en el selec trabajo con las tablas recibo, recibo_ecografia y ecografia y me muestra una grafica en barras donde me muestra que la tabla registro_ecografia no esta indexada, ademas me muestra que el tiempo que tarda es de 15 ms Tengo indices creados tanto por las llaves primarias y foraneas de las tablas Espero me puedan ayudar porfavor o darme sugerencias de como solucionar este problema mil gracias |
|
#7
|
||||
|
||||
|
Cita:
Mi primera recomendación es que hagas explícitas las uniones, queda todo mucho más claro, fácil de entender y modificar, y mucho más fácil de optimizar, tanto para el motor SQL como para que tu veas los índices necesarios. Esa misma consulta queda en :
Es fácil entender que la tabla registro__ecografia necesita un índice para el campo nro_recibo, la tabla ecografia necesita un índice en el campo nro, y la tabla recibo necesita un índice múltiple sobre los campos cancelado, fecha (en ese orden). NOTA : Fíjate que he acortado la condición : and(r.cancelado=:valor)and((r.cancelado=:valor)or(r.cancelado='M')) dejándola en : and recibo.cancelado = :valor Puesto que : A ^ (A v B) es igual a A Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). Última edición por guillotmarc fecha: 30-07-2010 a las 20:23:05. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Firebird, tarda mucho en conectar a base de datos en red | sonjeux | Conexión con bases de datos | 1 | 09-04-2009 08:29:40 |
| rewrite tarda si no hay red | jonmendi | OOP | 0 | 25-09-2008 10:03:23 |
| Ayuda Urgente, Por favor. Tarda mucho en traer los datos. | Paradiso | Firebird e Interbase | 25 | 31-05-2007 04:02:37 |
| Form que se tarda mucho en abrir | IVAND | Varios | 3 | 29-05-2007 02:14:07 |
| Por que tarda mucho en abrir un EXE | IcebergDelphi | Varios | 5 | 16-06-2004 11:05:28 |
|