PDA

Ver la Versión Completa : Vistas sort/index


StartKill
03-03-2004, 00:02:55
Wnas a todos. :cool:

Les comento, estoy trabajando con delphi 7.0 y interbase 6.xx y estoy utilizando componentes IBX. :D

He hecho un grid juntando 2 tablas, donde he utilizado un IBQuery y en su propieadad SQL he puesto el select con su join y ademas de un order by. :p

Cuando arranca el programa y al pedir mostrar dicho grid se demoraba cerca de 6 segundos(mas o menos)---eso es desesperante para los usuarios, y cuando no está el order by unos 4 1/2 segundos, aun asi es lento. :(

Lei sobre las vistas y manos a la obra, cree una vista y me di con la soorpresa que no se puede utilizar el order by. :mad:

Pero lo bueno que en mi nuevo grid y mi nuevo ibquery trabajo con la vista y zass es una bala---es preciosa la velocidad--- ni un segundo ya está en pantalla. :)

Pero necesito que este ordenada y procedi a añadir su respectivo order by en mi intruccion select de la propiedad SQL de mi IBQuery---y se demora 4 seconds. :(

Debo suponer que es lento por que tiene que ordenar antes de visualizar....

Como puedo hacer que sea mas rapido esto? me pregunté, y me doy la respuesta: como hago un index o un order by a una vista.

Que hacer?

Gracias

Your friend :cool:

StartKill
Lima-Perú

__cadetill
03-03-2004, 00:41:45
Si no lo tienes ya, prueba a crear un índice por el/los campos que estés haciendo el Order By.

De todas maneras, si tus usuarios se desesperan por una demora de 4-6 sg.... :rolleyes:

PD: también todo depende del volumen de información que estés moviendo, mira de acotar bien con el Where

StartKill
03-03-2004, 01:32:01
Hola.

hay veces que uno escribe no acorde a lo que piensa y necesita, ese soy uno de ellos.(solo cuando estoy muy truncao)

Lo que necesito es poner un indice en la base de datos para la vista y debo suponer que de esa forma aceleraria mi Query a una vista.

Uso el IBmanager y no veo una opcion para crear un indice a la vista que se encuentra en el servidor

Gracias.

Your friend :cool:

StartKill
Lima-Perú

__cadetill
03-03-2004, 09:57:00
No, yo me refería a la tabla sobre la que estás haciendo la vista, que si no tenía índice creado, lo crearas, para ver si el SQL sobre la tabla mejoraba o no, porque una vista, que yo sepa, no se puede ordenar ni crear índices

orodriguezc
03-03-2004, 19:31:53
Puedes crear un indice a la tabla sobre la que haces el Order By. Por supuesto, el indice debe iniciar con el campo o campos del order by.

También puedes crear un Stored Procedure que incluya la clausula Order By en la instrucción Select. En la propiedad SQL del IBQUERY solo tendrías que escribir "Select * from miStoredProcedure" y no preocuparte del ordenamiento, ya que el Stored procedure es quien lo realiza.

jachguate
03-03-2004, 20:10:18
También puedes crear un Stored Procedure que incluya la clausula Order By en la instrucción Select. En la propiedad SQL del IBQUERY solo tendrías que escribir "Select * from miStoredProcedure" y no preocuparte del ordenamiento, ya que el Stored procedure es quien lo realiza.

Solo aclarar que esta es una forma práctica de conseguir "vistas" ordenadas (si revisas el estándar SQL, verás que una vista no puede incluir en su definición una clausula order by). Sin embargo, tenes que seguir valiendote de indices (en las tablas de base de la vista) para que la consulta ordenada sea optima.

para crear un indice: Create index.
con cualquier herramienta podes consultar también el plan de una consulta para ver si el indice está siendo utilizado...

hasta luego.

;)

Luis Castillo
16-01-2006, 16:15:46
A ver... tengo un problema similar a lo comentado....tengo una vista y la muestro por medio de un IBQUery y en un DBGrid. Pero no puedo ordenarla.

Pero necesito que este ordenada y procedi a añadir su respectivo order by en mi intruccion select de la propiedad SQL de mi IBQuery---y se demora 4 seconds

Eso no me funciono a mi....porque el el IBQuery.SQL tengo:

Select *
From Vista

Y le agrego

ORder by Columna1, columna2, columna3

Pero cuando abro la consulta me muestra error....algo asi como que no conoce el ORder by

Que puedo hacer....