Optimizar sentencias que demoran

12/12/2009 - 17:38 por Emerson | Informe spam
Hola a Todos,
Tengo una duda sobre como optimizar las sentencias qeu demoran mucho, ya sea
por qeu la tabla tenga muchos registro, o le falten indices, o tengan muchos
indices, etc.
mi duda es la siguiente:
Realizo un Select, donde incluya varias tablas digamos 8, y las cuales tenga
que usar los Inner Join (left o rigth), lo cual hay tablas que tienen miles
de registros y otras qeu son solo maestros y tienen pocas(digamos 500 a 1000
aprox) entocnes la consulta se demora unos 5 minutos, pero por otro aldo el
mismo resultado de dicha consulta lo obtengo, cambiando el scrip anterior,
creando tablas temporales, vale decir, uno la 1 y 2 tabla y lo guardo en una
tabla temporal(T1), luego uno la 3 tabla y lo uno con el resultado
anterior(T1) y lo guardo en otra tabla temporal (T2), y asi sucesivamente se
va uniendo estos resultados mediantes Joins, y tratando de unir la tabla con
mas registros con otra de menos registros y asi disminuir los JOINS.
y resulta que lo segundo demoro mucho menos, como 1 minutos.
segun escuche por ahi que sql procesa poco a poco cada sentencias y de ahi
lo uno y eso es mas rapido que usar unsolo select para traer el mismo
resultado.
ahi entra mi duda, si es bueno hacer eso? o no hacerlo? por que? cual es la
mejor practica? se supone que usar tablas temporales es lo menos indicado?
si me pudieran dar su opinion al respecto por favor.

Saludos y gracias a todos.

Emerson
 

Leer las respuestas

#1 Maxi Accotto
13/12/2009 - 06:01 | Informe spam
Emerson, no es necesario que use tablas tenporales, lo que puede hacer en un
join es primero filtrar los subconjuntos y luego aplicar el join usando
tablas derivadas

select ...

from ( select campos from tabla1
where condiciones) as t1

inner join

(select campos from tabla2
where condiciones) as t2
on
t1.id = t2.id


Ademas le recomiendo que siempre analice los planes de ejecucion.



Maxi Accotto
MVP en SQL Server
http://blog.maxiaccotto.com

"Emerson" wrote in message
news:#
Hola a Todos,
Tengo una duda sobre como optimizar las sentencias qeu demoran mucho, ya
sea por qeu la tabla tenga muchos registro, o le falten indices, o tengan
muchos indices, etc.
mi duda es la siguiente:
Realizo un Select, donde incluya varias tablas digamos 8, y las cuales
tenga que usar los Inner Join (left o rigth), lo cual hay tablas que
tienen miles de registros y otras qeu son solo maestros y tienen
pocas(digamos 500 a 1000 aprox) entocnes la consulta se demora unos 5
minutos, pero por otro aldo el mismo resultado de dicha consulta lo
obtengo, cambiando el scrip anterior, creando tablas temporales, vale
decir, uno la 1 y 2 tabla y lo guardo en una tabla temporal(T1), luego uno
la 3 tabla y lo uno con el resultado anterior(T1) y lo guardo en otra
tabla temporal (T2), y asi sucesivamente se va uniendo estos resultados
mediantes Joins, y tratando de unir la tabla con mas registros con otra de
menos registros y asi disminuir los JOINS.
y resulta que lo segundo demoro mucho menos, como 1 minutos.
segun escuche por ahi que sql procesa poco a poco cada sentencias y de ahi
lo uno y eso es mas rapido que usar unsolo select para traer el mismo
resultado.
ahi entra mi duda, si es bueno hacer eso? o no hacerlo? por que? cual es
la mejor practica? se supone que usar tablas temporales es lo menos
indicado?
si me pudieran dar su opinion al respecto por favor.

Saludos y gracias a todos.

Emerson

Preguntas similares