Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Ordenamiento lento (https://www.clubdelphi.com/foros/showthread.php?t=21140)

brandolin 08-05-2005 04:46:20

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

Mick 08-05-2005 15:30:08

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

brandolin 09-05-2005 06:40:11

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

diegod 11-05-2005 20:57:56

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 :(


La franja horaria es GMT +2. Ahora son las 10:45:28.

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