Maison >base de données >tutoriel mysql >Quand OPTION (RECOMPILE) rend-il les requêtes SQL étonnamment plus rapides ?
Introduction
L'OPTION (RECOMPILE ) dans SQL Server a toujours été considérée comme une opération coûteuse, mais son inclusion dans certaines requêtes peut entraîner des problèmes importants. améliorations des performances. Ce paradoxe a laissé de nombreux développeurs perplexes, conduisant à des questions sur les mécanismes sous-jacents et les circonstances dans lesquelles OPTION (RECOMPILE) est vraiment avantageux.
La question
Un développeur rencontré une situation anormale où l'ajout d'OPTION (RECOMPILE) à une requête a considérablement réduit son temps d'exécution de plus de cinq minutes à une demi-seconde. Ce comportement persistait, que la requête ait été exécutée à partir de Query Analyzer ou via une application C# à l'aide de SqlCommand.ExecuteReader(). L'appel de requête utilisait toujours les mêmes paramètres pour éliminer tout problème de détection de paramètres sous-optimaux.
L'explication
Contrairement à l'hypothèse selon laquelle OPTION (RECOMPILE) est toujours une opération coûteuse, elle peut être bénéfique dans des scénarios spécifiques. Une explication courante est la nécessité de reconstruire le plan d'exécution lorsque les données ou les paramètres sous-jacents changent de manière significative.
Lorsque SQL Server crée une procédure stockée (ou toute requête paramétrée), il met en cache le plan d'exécution le plus efficace en fonction du données et paramètres initiaux. Cependant, les exécutions ultérieures avec des données ou des paramètres différents peuvent ne plus correspondre au plan d'exécution mis en cache. Dans de tels cas, la recompilation du plan d'exécution à l'aide d'OPTION (RECOMPILE) oblige SQL Server à l'optimiser pour les conditions actuelles, conduisant potentiellement à de meilleures performances.
Dans le cas spécifique présenté, le développeur doit envisager de reconstruire l'exécution de la requête. plan et mise à jour des statistiques à l’aide de sp_updatestats. Ce processus garantit que le plan d'exécution mis en cache est basé sur les informations les plus à jour, réduisant ainsi le besoin de recompilation à chaque exécution.
Principaux points à retenir
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!