Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-07-2010
Choclito Choclito is offline
Miembro
 
Registrado: jul 2004
Posts: 169
Poder: 20
Choclito Va por buen camino
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:
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
Responder Con Cita
  #2  
Antiguo 30-07-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
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
  #3  
Antiguo 30-07-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Como haces una conversión sobre el campo FECHA, quizás el optimizador no podrá usar el índice correspondiente, en ese caso tendrás que realizar la consulta sin hacer la conversión. Es decir ese filtro es equivalente a :

Código SQL [-]
where recibo.fecha between :desde and :hasta + 1 and
          recibo.fecha <> :hasta + 1 and
          recibo.cancelado = :valor

Que es exactamente lo mismo que :

Código SQL [-]
where recibo.fecha >= :desde and recibo.fecha < :hasta + 1 and
          recibo.cancelado = :valor

Aunque este último filtro es más difícil de optimizar para Firebird, puesto que puede necesitar que el índice sobre FECHA sea bidireccional, cosa que no es así en todas las versiones de Firebird.

Todo es cuestión de probar, hasta dar con los índices y la consulta que mejor puede optimizar el motor.

Aunque la consulta por la que te recomiendo empezar es :

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 recibo.fecha between :desde and :hasta + 1 and
      recibo.fecha <> :hasta + 1 and
      recibo.cancelado = :valor

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #4  
Antiguo 30-07-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
El IB PLANnalyzer lo puedes encontrar aquí :

http://www.ibphoenix.com/main.nfs?a=...ibp_misc_tools

Pero el enlace de descarga está muerto. Lo siento, yo no lo tengo y no conozco ninguna descarga alternativa, no lo uso, el IB-Expert ya me da toda la información que necesito para optimizar mis consultas.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 03-08-2010
Choclito Choclito is offline
Miembro
 
Registrado: jul 2004
Posts: 169
Poder: 20
Choclito Va por buen camino
gracias por responder

Muchas gracias guillotmar por responder realizare las pruebas que me suguieres y luego comento como me fue y disculpas por no responder mas antes.
Responder Con Cita
  #6  
Antiguo 03-08-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
No olvides crear los índices que te comenté en el primer mensaje, es decir :

Cita:
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).
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #7  
Antiguo 03-08-2010
Choclito Choclito is offline
Miembro
 
Registrado: jul 2004
Posts: 169
Poder: 20
Choclito Va por buen camino
gracias por responder

Amigo guillotmarc te comento que logre bajar el ib planalyzer y en la grafica me muestra que la tabla registro_consulta_medica no esta indexado
la estructura de mis tablas es la siguiente
tabla recibo (
nro_recibo llave primaria,
fecha,
observaciones.
etc)
tabla registro_consulta_medica(
nro llave primaria
nro_recibo llave foranea y llave primaria,
nro_consulta llave foranea y llave primaria,
costo,
observaciones)
tabla consulta_medica(
nro llave primaria,
id_doctor,
costo1,
costo2)

Tengo la tabla recibo y la tabla consulta_medica y como existe una relacion de n a n es que la relacion de ellas es la tabla registro_consulta_medica con tres campos como llave principal.
Creo q ahi esta el error .
Esta sitacion tengo tanto con las tablas emergencias, venta_medicamentos, etc donde la relacion de las tablas tiene 3 campos como llaves primarias
Al crear las llaves primarias y foraneas Ib expert ya me crea los indices por los campos
Porfavor quisiera sugerencias de como arreglar pues la tabla recibo ya tiene mas de 16000 registros
Estare muy agradecido por la ayuda q me puedan brindar
y comentarte que ya cree los indices multiples de cancelado y costo
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 14:11:02.


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