Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #11  
Antiguo 30-07-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 26
guillotmarc Va por buen camino
Cita:
Empezado por Choclito Ver Mensaje
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:
Código SQL [-]select r.nro_recibo,cast(r.fecha as date),g.nombre, case r.porcentaje_cobro when 100 then r1.costo else (r.porcentaje_cobro*r1.costo)/100 end,r.costo_total,r.literal,r.nro_ambulatorio,r.usuario,r.tipo_paciente,r.nro_asegurado,r.nro_intern acion,r.factura,cast(r.fecha as time),r.monto_cobrar,r.porcentaje_cobro,r1.nro,r.nro_factura from recibo r,registro__ecografia R1,ecografia g where ((r1.nro_recibo=r.nro_recibo)and(r1.tipo_ecografia=g.nro)and(cast(r.fecha as date) between :f1 and :f2)and(r.cancelado=:valor)and((r.cancelado=:valor)or(r.cancelado='M')))

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
Hola.

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 :

Código SQL [-]
select recibo.nro_recibo,cast(recibo.fecha as date) as fecha, cast(recibo.fecha as time) as hora,
       ecografia.nombre as ecografia,
       case recibo.porcentaje_cobro when 100 then registro__ecografia.costo
                                             else (recibo.porcentaje_cobro * registro__ecografia.costo) / 100 end as costo,
       recibo.costo_total, recibo.literal, recibo.nro_ambulatorio, recibo.usuario, recibo.tipo_paciente, recibo.nro_asegurado,
       recibo.nro_internacion, recibo.factura, recibo.monto_cobrar, recibo.porcentaje_cobro, recibo.nro_factura,
       registro__ecografia.nro
from recibo
     inner join registro__ecografia on registro__ecografia.nro_recibo = recibo.nro_recibo
     inner join ecografia on ecografia.nro = registro__ecografiaa.tipo_ecografia
where cast(recibo.fecha as date) between :desde and :hasta and
      recibo.cancelado = :valor

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.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 23:39:42.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi