Oracle - Ejemplo con tablas temporales

 
Vista:

Ejemplo con tablas temporales

Publicado por Angie (3 intervenciones) el 29/07/2002 16:44:32
Tengo una tabla de 100.000 registros y he hecho un query simple que barre toda la tabla y hace calculos si lo hago de forma normal me domoro 10 minutos en que salga la consulta.
Quiero hacerlo con tablas temporales y necesito un store procedure de ejemplo para ver como se hace, se supone con las tablas temporales es mas rapida la consulta
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ejemplo con tablas temporales

Publicado por DACH (258 intervenciones) el 29/07/2002 21:54:20
Hola, toda consulta se puede optimizar. Si deseas trabajar con tablas temporales existen dos alternativas: Física y Lógica, para la física esta claro que debes crear una tabla según tus requerimientos, esta debe existir fisicamente en la base de datos.
La otra es que trabajes con tablas de memoria, esto significa que debes crear una estructura de tipo registro en donde almacenarás lo que encesitas, es decir, con la misma escructura que la tabla fisica. Este último método te asegura una respuesta muchísimo más rápida.-

Salu2.-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Optimar.

Publicado por Jorge (87 intervenciones) el 31/07/2002 17:27:00
Yo no creo que la solución sea utilizar tablas temporales, inicialmente 100,000 registros no es algo exagerado, principalmente para Oracle, yo pienso que tienes problemas de afinamiento (Tuning) en tu base de Datos, y debes de utilizar Indices o correr un Analize a tu tabla o mas bien a tu base de Datos, si es posible, darle una revisadita al INIT.ORA para dejar bien configurado tu SGA.

Si tienes una version de Oracle 8.xxx para arriba prueba utilizando hint's, poniendo :

SELECT /*+ FIRST_ROWS */ Campo1,campo2,
FROM .....

o

SELECT /*+ RULE */ Campo1,campo2,
FROM .....

Tambien puedes tratar de cambiar el orden de las tablas en el From, y ordenar bien las comparaciones en el Where para tratar de optimizar tus Query's.

Efectivamente, un Procedimiento almacenado en la Base de Datos puede hacer que el resultado sea mas rapido, sin embargo si su procedimiento está mal tuneado la mejora no será mucha.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Optimar.

Publicado por Angie (3 intervenciones) el 01/08/2002 16:53:12
yo recien estoy aprendiendo oracle me podrias indicar cual es el patron para colocar el orden de las tablas cuando existe una consulta en el que intervienen varias tablas y el orden de las comparaciones en el where para poder hacer optimo mi store procedure
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Respuesta a Como Optimizar.

Publicado por Jorge (7 intervenciones) el 02/08/2002 20:23:52
Hola Angie.

la verdad es que para poderte explicar lo del orden y todo éso, sería muy largo, pero si te interésa, en mi página personal,.. en la siguiente dirección: http://www.jdguillen.freeservers.com/tareas.htm puedes encontrar un Link llamado "Afinamiento de Aplicaciones Oracle" el cual contiene una presentación que yo di en una universidad la cual tiene una explicación completa sobre afinamiento, y en élla se inclulle todo lo que tu necesitas saber sobre el afinamiento.

Espero que te sirva.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Optimar.

Publicado por Rafael (1 intervención) el 13/12/2013 20:31:03
en las versiones oracle 8 para arriba no se recomienda el uso de hints, y con el optimizador por costos el orden en que escribas tanto el from como las condiciones no es tan importante, lo primero q deberias hacer es ver cual es el indice mas selectivo q tengas (gralmente la pk, pero no se si te servira para tu consulta), y asegurarte que todos los campos que conforman el indice esten en el where, otra cosa q te puede servir es poner los valores constantes del lado derecho en las condiciones, no aplicar funciones a los campos q tengan indice, salvo q el indice sea con funcion, usar exists o not exists en lugar de in / not in, o un left join, tratar de hacer condiciones con and y no con or xq anula los indices. son pequeño tips.
Fijate cual es el plan de ejecucion , es la mejor forma de ver que es lo que te esta haciendo la consulta pesada, seguramente sobre alguna tabla hace full scan
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Optimar.

Publicado por Jorge (87 intervenciones) el 01/08/2002 17:35:37
yo recien estoy aprendiendo oracle me podrias indicar cual es el patron para colocar el orden de las tablas cuando existe una consulta en el que intervienen varias tablas y el orden de las comparaciones en el where para poder hacer optimo mi store procedure
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Optimar.

Publicado por DACH (258 intervenciones) el 02/08/2002 19:12:47
Si lo que Jorge te dice esta super bien, primero se debe optimizar las querys dependiendo de que esten haciendo.
Pero esta claro que en el From debes ubicar en forma creciente las tablas desde la más liviana (en cuanto a volumen de datos) hasta la más pesada.

Salu2.-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Optimar.

Publicado por Harold (697 intervenciones) el 07/08/2002 18:00:00
No señor esta equivocado.

Oracle hace el parse (cuando esta en costo default en oracle) de izquierda a derecha, esto significa que la tabla menor (en datos) tiene que ir de ultimo.
Si lo haces de forma contraria obligas a un full table scan sobre todas las tablas:
Si tienes una tabla de 30 millones de registro contra otra con 3 millones y pones primero la de 3 y luego la de 30 obligas a que oracle por cada registro de la de 3 millones sea leido 30 millones de veces.

Cuando esta en Rule es exactamente lo contrario asi como dices de la mas liviana a la mas pesada por que el parseo es de derecha a izquierda.

Saludes

Harold
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Optimar.

Publicado por Angie (3 intervenciones) el 07/08/2002 19:18:20
Sabes en eso tienes razon porque hice la prueba con respecto a lo anterior que me decian y se me demoraba mas y el mio esta el costo por default.
Gracias por la sugerencia,fue muy buena
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Optimar.

Publicado por Harold (697 intervenciones) el 08/08/2002 00:42:54
La forma en que oracle hace el parse es un detalle que los desarrolladores no conocen y es super importante.

Es bueno mencionar que en las versiones posteriores de oracle (de 9i en adelante) la forma de optimizacion por regla (Rule) ya no sera soportada, de hecho, en el segundo Release de 9i (puesto en mercado hace como 5 meses) ya no se soporta Rule, todo por costo.

Algo que tienes que hacer tambien se actualizar las estadisticas del objecto a que haces referencia, esto lo haces con el comando analyze, con esto podrias mejorar de gran manera el rendimiento, la actualizacion de las estadisiticas es una tarea propia de los DBA y requisito fundamental para BD seteas en costo.

Saludes

Harold
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar