Le reniflage paramétrique dans EF 6 revisité
Bien que les requêtes dynamiques offrent de la flexibilité, leur taille peut entraîner des problèmes de performances dans EF 6. Un coupable courant est le reniflage de paramètres, où le plan de requête est mis en cache en fonction des paramètres d'exécution initiaux, conduisant à des plans inefficaces lorsque les paramètres varient.
Adressage du reniflage de paramètres avec EF 6
Pour surmonter le reniflage de paramètres, il est crucial d'informer le moteur de base de données de recompiler la requête à chaque exécution. Bien que la mise à jour des statistiques de la base de données soit une pratique courante, elle peut ne pas résoudre complètement le problème.
Incorporation de « OPTION RECOMPILE » avec EF 6
Heureusement, EF 6 fournit des mécanismes pour manipuler Commandes SQL avant exécution. L'une de ces techniques consiste à utiliser la fonctionnalité d'interception.
Implémentation via interception
L'exemple de code suivant illustre l'implémentation de la classe OptionRecompileHintDbCommandInterceptor :
public class OptionRecompileHintDbCommandInterceptor : IDbCommandInterceptor { ... private static void addQueryHint(IDbCommand command) { ... } }
Cet intercepteur ajoute l'indice OPTION RECOMPILE aux instructions SQL qui commencent par "select" et ne contiennent pas déjà le indice.
Utilisation
Pour exploiter cet intercepteur, ajoutez simplement le code suivant au démarrage de l'application :
DbInterception.Add(new OptionRecompileHintDbCommandInterceptor());
En utilisant cette approche, vous pouvez forcer le moteur de base de données à recompiler la requête à chaque exécution, atténuant ainsi le reniflage des paramètres et améliorant les performances des requêtes.
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!