![]() |
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 Código:
Select cod_articulo, nom_articulo, precio from ConsArticulo order by nom_Articulo 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 |
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 |
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 |
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 05:50:07. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi