Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > SQL Server

Respuesta
 
Herramientas Desplegado
Antiguo 28-jul-2006, 17:03   #1 (permalink)
lanzi no se puede cailificar en este momento
 
Avatar de lanzi
 
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 45
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.-
lanzi está desconectado   Responder Citando
Antiguo 30-jul-2006, 17:05   #2 (permalink)
monkyta no se puede cailificar en este momento
 
Fecha de Ingreso: noviembre-2005
Mensajes: 621
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......
monkyta está desconectado   Responder Citando
Antiguo 31-jul-2006, 11:22   #3 (permalink)
Colaborador
Andres95 tiene algunos puntos positivos de karma
 
Avatar de Andres95
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.079
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

Andres95 está desconectado   Responder Citando
Antiguo 03-ago-2006, 03:31   #4 (permalink)
Teri está en el buen camino
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 705
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
Teri está desconectado   Responder Citando
Antiguo 24-oct-2006, 16:19   #5 (permalink)
lanzi no se puede cailificar en este momento
 
Avatar de lanzi
 
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 45
gracias por la ayuda!!!!!!!!!!!!!!!
lanzi está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 04:55.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93