Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

optimizando STORED PROCEDURES (HELP)

Estas en el tema de optimizando STORED PROCEDURES (HELP) en el foro de SQL Server en Foros del Web. Hola, amigos del foro, les comento mi inconveniente: Tengo un Stored Procedure con una conbinacion de 10 tablas, con sus respectivos INNER JOIN, a su ...
  #1 (permalink)  
Antiguo 28/07/2006, 17:03
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 5 meses
Puntos: 0
optimizando STORED PROCEDURES (HELP)

Hola, amigos del foro, les comento mi inconveniente:

Tengo un Stored Procedure con una conbinacion de 10 tablas,
con sus respectivos INNER JOIN, a su vez, lo parametrizo con 3 o 4
WHERE y luego termino por ordenar los resultados con 3 ORDER BY,
mi consulta es la siguiente:

Vi en un libro que los SP se pueden optimizar para que la respuesta
sea mas rapida, y en el mio, al ver el desarrollo, me pone que
el costo de la consulta, va aumentando 0%, luego 300%, luego 500%
y por ultimo 800%, motivo por el cual supuse que algo no andaba del
todo bien, quizas este preguntando una burrada, pero soy bastante
nuevo en el tema y me preocupo el hecho de estar haciendo algo poco
serio, y por otro lado, en caso de poderse optimizar, Como lo hago?
Desde ya les agradezco las respuestas que de seguro vendran.-
  #2 (permalink)  
Antiguo 30/07/2006, 17:05
 
Fecha de Ingreso: noviembre-2005
Mensajes: 658
Antigüedad: 18 años, 5 meses
Puntos: 3
1.- Revisa que las condiciones usen columnas de campos claves para que no se produzcan lo llamado Table Scan (barrido de toda la tabla)
2.- Lo mismo vale para el Order by... siempre trata de hacerlo con columnas que sean índices... no importa que no sean los indices clustered; puede ser cualquier indice...
Lo basico para cualquier consulta es que las tablas deben de tener por un lado un indice unico clustered y varios usados para las distintas querys

Esas 2 cosas son claves en los Joins......
  #3 (permalink)  
Antiguo 31/07/2006, 11:22
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
puedes forzar a que sql tome el indice que requieres...

p.e.

select campos from mitabla m (index = mi_indice) where m.campoindice1 = @valor1 and m.campoindice2 = @valor2

  #4 (permalink)  
Antiguo 03/08/2006, 03:31
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años
Puntos: 0
Dices que tienes 3 ORDER BY, eso puede significar ordenar el resultado final por tres campos o las tablas que componen el query ordenadas.

Si es lo segundo, quítalo, estás penalizando el rendimiento y no consigues nada....

Intenta que alguna de esas relaciones entre las diez tablas la hagas con una consulta previa, a lo mejor, en vez de 10 tablas, te salen 5 o seis consultas, eso hará que sea un poco más rápido.

Si es un sp crítico, deberías darle prioridad sobre otras cosas, con lo que deberías tener los índices cluster de tus tablas en base a los filtros que estés utilizando y el ORDER BY, recuerda, poner los WHERE en el mismo orden que tengas definidos los índices, si no, te van a ser de poca utilidad.

Lo siguiente que tienes que hacer es poner el SP en el analizador de consultas y ver dónde se te va el tiempo, a veces una relación tonta te puede penalizar más de lo que se piensa.

Suerte
  #5 (permalink)  
Antiguo 24/10/2006, 16:19
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 5 meses
Puntos: 0
gracias por la ayuda!!!!!!!!!!!!!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:59.