![]() |
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.- |
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...... |
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 :arriba: |
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 :adios: |
gracias por la ayuda!!!!!!!!!!!!!!! |
| La zona horaria es GMT -6. Ahora son las 05:15. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.