Trata de no usar Planes Guiados o úsalos cuando no te quede otra opción. Básicamente, cuando tenemos un Plan Guiado, estamos diciendo al Optimizador de consultas que es lo que tiene que hacer. Estamos limitando las opciones que nos ofrece el Optimizador, y solo hemos de usarlo cuando conocemos bien el problema, y estamos seguros que el Optimizador no nos esta dando una buena solución.
La única ventaja de usar estos planes guiados es que no hay necesidad de modificar la aplicación. Todo se pude hacer en la base de datos, sin necesidad de modificar la aplicación. Esto es muy útil, cuando nosotros tenemos aplicaciones donde no tenemos el código, o cuando por temas de licencia o soporte no se nos permite modificar el código.
Por poner un ejemplo, Imagina que tienes una Select... con un plan de ejecución que utiliza un “Hash Match”, y por cualquier razón quieres evitar que utilice este Hash, y en su lugar forzar un “Loop Join”, para esto crearíamos el plan guiado para dicha consulta de la forma:
EXEC sp_create_plan_guide
@name = N’plan_guide_test’,
@stmt = N’ Select campos from tabla….’,
@type = N’OBJECT,
@module_or_batch = N’test’,
@params = NULL,
@hints = N’OTION (LOOP JOIN);
En lugar de Panes Guiados se puede usar HINTs
Los Hints son opciones o estrategias especificadas para que el procesador de consultas de SQL Server las aplique en instrucciones SELECT, INSERT, UPDATE o DELETE. Las sugerencias reemplazan a cualquier plan de ejecución que pueda seleccionar el optimizador de consultas para una consulta.
Te paso un par de enlaces:
http://msdn.microsoft.com/en-us/library/ms187373.aspx
http://msdn.microsoft.com/en-us/library/ms187713.aspx
Fuentes:
Microsoft, MSDN, Benjamin Nevares
Apunte y recopilación por Norman M. Pardell
Puedes consultarme, si deseas cualquier aclaración, pregunta o sugerencia en: Contacto, contestaré tan pronto como me sea posible.