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 Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-05-2005
brandolin brandolin is offline
Miembro
 
Registrado: jul 2003
Ubicación: Mendoza
Posts: 324
Poder: 21
brandolin Va por buen camino
Ordenamiento lento

Hola a todos, tengo lo siguiente...

Dos tablas Articulos y precios y una vista que hace un join de las dos con el codigo del articulo como indice. A esta vista la llama desde mi programa (Delphi 7 + IBDataSet + Firebird 1.5) para que se visualicen los articulos con sus precios ejecuto la siguiente orden:

Código:
Select cod_articulo, nom_articulo, precio from ConsArticulo
Todo fantastico pero el problema es cuando ejecuto la orden:

Código:
Select cod_articulo, nom_articulo, precio from ConsArticulo order by nom_Articulo
Alli es cuando se demora de 45 seg a un minuto para unos 10.000 registros. estos se visualizan en una grilla....

no se porque el order by se demora tanto. Alguna idea de como funciona el mismo o bien alguna alternativa para hacelerar el ordenamiento...

Desde ya muchas gracias
Responder Con Cita
  #2  
Antiguo 08-05-2005
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 22
Mick Va por buen camino
Un order by implica que la computadora tiene que ordenar los registros, y eso consume tiempo, y cuantos mas articulos haya mas tiempo necesitara la computadora, no es lo mismo ordenar solo 2 articulos que 10.000.

Si ademas tienes joins, la cosa se puede complicar mucho mas.

La solucion para este tipo de problemas consiste en algo basico en sistemas de bases de datos y que todo programador que se precie debe conocer perfectamente: tener previamente ordenados los registros por los campos que interesen.
Esto es lo que hacen los indices de las bases de datos y para lo que se usan: para que los ordenamientos y busquedas no se eternicen.

En definitiva hay que estudiar las queries que el sistema vaya a utilizar, y en funcion de ellas crear los indices adecuados que aceleren estas queries.

Saludos
Responder Con Cita
  #3  
Antiguo 09-05-2005
brandolin brandolin is offline
Miembro
 
Registrado: jul 2003
Ubicación: Mendoza
Posts: 324
Poder: 21
brandolin Va por buen camino
Antes que nada, gracias por responder.

Luego de mucho probar me parece que he encontrado la solucion, aparentemente estaba el problema en el join dentro de la vista ya que cambie la llamada al view por un select comun y corriente relacionando las dos tablas y perece que agilizo mucho la consulta.

Ademas ya tenia creado antes de hacer las pruebas los indices correctos por lo que no me inclino a decir que haya sido este el problema ya que por mas que tenia los indices correctos lo mismo estaba lento.

Gracias por todo
Responder Con Cita
  #4  
Antiguo 11-05-2005
diegod diegod is offline
Registrado
 
Registrado: may 2005
Posts: 3
Poder: 0
diegod Va por buen camino
Ordenamiento lento

Hola:
Sabes, yo he tenido problemas similares.
Lo que me han dicho es que el INNER JOIN realiza ordenamientos cartesianos complejos (mucha explicación para lo que puedo entender yo).
Yo he solucionado el problema utilizando LEFT OUTER JOIN.
Claro que no es lo mismo, pero así va rápido.
utilizando el IBExpert, realizando ambas consultas puedes ver la diferencia de lecturas que hay entre una opción y otra.
Aun aunque tenga creados los índices esto sucede siempre.
habría que ver como es que ordena las consultas con INNER JOIN el Firebird.
En un SQL 7 la misma consulta no tarda nada, por lo que seguramente las lecturas con uso de relaciones entre tablas las hacen distinto.

Estaría bueno que alguien con conocimientos nos ilumine en estas diferencias, pero yo ya he inentado en vano
Responder Con Cita
Respuesta



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


La franja horaria es GMT +2. Ahora son las 01:37:13.


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