Maison >base de données >tutoriel mysql >Pourquoi ma procédure stockée souffre-t-elle de problèmes de performances même avec un paramètre NULL, et comment puis-je y remédier ?

Pourquoi ma procédure stockée souffre-t-elle de problèmes de performances même avec un paramètre NULL, et comment puis-je y remédier ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-21 15:18:11328parcourir

Why Does My Stored Procedure Suffer Performance Issues Even with a NULL Parameter, and How Can I Fix It?

Renifleur de paramètres et performances du plan d'exécution de procédure stockée

Une procédure stockée rencontre des problèmes de performances lorsqu'elle est exécutée avec @MyDate comme NULL, même si le le plan d’exécution généré n’est pas optimal. Ce problème persiste, que @MyDate soit réellement NULL ou défini sur l'horodatage actuel par une instruction IF.

On pense que le plan d'exécution problématique est dû au reniflage de paramètres, où SQL Server compile la procédure stockée en fonction de les valeurs des paramètres fournies au moment de la compilation. Cependant, dans ce cas, le problème se pose même lorsque le paramètre est NULL, ce qui contredit les scénarios typiques de reniflage de paramètres.

La désactivation du reniflage de paramètres en usurpant le paramètre (@MyDate_Copy) résout le problème. Cela suggère que le serveur utilise un plan d'exécution incorrect basé sur une valeur NULL arbitraire.

Aperçu du phénomène

Selon la réponse acceptée, le reniflage de paramètres dans SQL Server 2005 est connu pour présenter des problèmes pouvant conduire à de mauvais plans d'exécution. On suppose que le serveur génère un plan inefficace basé sur des valeurs de paramètres non représentatives, même lorsque le paramètre est NULL. De plus, des problèmes avec les LEFT JOIN et les NULL ont été observés, qui ont été résolus en les remplaçant par NOT IN ou NOT EXISTS.

Solution

Pour SQL Server 2008, le L'option OPTIMISER POUR INCONNU peut être utilisée pour atténuer le problème.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn