![]() |
![]() |
| 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
|
||||
|
||||
|
Cita:
Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
|
#2
|
|||
|
|||
|
Hola,
Cita:
Si, ya sé que el problema lo tengo directamente en la propia consulta, pues como te dije, me tarda horrores directamente desde IB. Lo que quería decir es eso de "y de lanzarla desde delphi, ... ni hablamos..." pues si el problema está el la BD... en Delphi no va a ir bien ni de bromita. En cualquier caso, tendré que revisar los indices que tengo, por que esto mismo me pasó con otra consulta, (creo recordar que tu mismo me dijiste como solucionarlo, esto es, que tuviese especial cuidado con los indices), y esta vez yo creía que los había puesto bien. Muchas gracias por la ayuda, Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :) |
|
#3
|
|||
|
|||
|
Hola a todos,
He estado probando lo que me comentó guillotmarc. El caso es que parece que funcina cuando lo utilizo en un procedimiento que tira de otro procedimiento y de unas tablas, pero me va muy, muy lento. He estado revisando los indices para las tablas que intervienen en cada uno de ellos, parece que tengo todos los campos que se usan en algún momento en el where dentro de un indice directamente en su tabla correspondiente. Pero me sigue llendo lento, muy, muy lento. Arta de no conseguir nada, decidí que tal vez, el hecho de que esté tirando de otro procedimiento, podía ser la causa de la tardanza, (aunque este procedimiento no tarda en ejecutarse), así que decidí montar el procedimiento con todo el código directamente dentro de este procedimiento, para que no dependa de ningún otro. En el otro procedimiento utilizo inner join para ir juntando las tablas, y al juntar el código de los procedures, (el nuevo y del que dependía antes), encuentro que no me filtra bien, aunque eso si, va mucho más rápido. El código que me funciona, aunque lento es:
Donde el código del procedimiento renopla2 es el siguiente:
El nuevo que estoy montando es:
El cual, supuestamente tendría que ser la unión de los otros dos. No me filtra por el select count, ¿que estoy haciendo mal? ¿hay forma de forzar indices a un procedimiento? alguien me puede ayudar?? Muchas gracias Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :) |
|
#4
|
||||
|
||||
|
Hola.
El hecho de unir los dos procedimientos en uno solo, te va a proporcionar un aumento mínimo del rendimiento. Yo no lo haría, sobretodo cuando está claro que tienes un problema de falta de índices.(Saltarse el procedimiento almacenado, solo valdria la pena si quieres pasar de un rendimiento de, pongamos 1.5 segunos a 1.0 segundos, pero no es el caso). Tienes que estudiar el plan de ejecución de cada una de las consultas involucradas. Te va a indicar el índice que se utiliza para cada tabla y unión involucrada en la consulta. Lo primero que tienes que buscar es tablas donde te muestre NATURAL, aquí te está indicando que esa tabla no se optimiza con ningún índice. (En caso de que todas las tablas utilizen un índice, entonces tendrás que buscar que índice es de poca ayuda en la consulta, y sustituirlo por un índice compuesto de varios campos). Además puedes utilizar un depurador de procedimientos almacenados. Ejecutando línea a línea el procedimiento almacenado, vas a ver en que línea se pierde el rendimiento. Utiliza SQL'92 y no SQL'89 (creo). Estás creando un producto cartesiano : Código:
select distinct
renopla2.NUMALU, renopla2.nombre, renopla2.TELFALU, renopla2.nomcli,
renopla2.fecfincurso, grupos.alias
from renopla2 EXTE, grupos , comen
where (( select count (*) from renopla2 inte
Where inte.numalu=exte.numalu)=1 )
and ((renopla2.numalu=comen.numalu) and (comen.tipo=97) and (comen.alias=grupos.alias))
Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
|
#5
|
||||
|
||||
|
Hola,
Cita:
Cita:
Cita:
Cita:
¿donde estoy creando un producto cartesiano? Perdona pero, ¿me lo puedes aclarar algo más? Muchas gracias por todo, Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :) |
|
#6
|
|||
|
|||
|
Cita:
La versión personal es gratuita Cita:
Cita:
Si no usas joins, lo que estás creando es un producto cartesiano. En este caso entre renopla2 y grupos. |
|
#7
|
|||
|
|||
|
Hola cadetill,
Cita:
Cita:
Cita:
Muchas gracias, Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :) Última edición por Giniromero fecha: 09-06-2004 a las 13:31:45. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|