Formation PUB200 : MySQL, 2018 Les procédures et fonctions stockées

15.8 "DETERMINISTIC" vs "NOT DETERMINISTIC"


L'écran « Ajouter une procédure » dans phpMyAdmin, vous offre la possibilité de cocher la case « est déterministe ». Depuis MySQL 5.0.16, ceci s'applique seulement aux fonctions stockées. Les procédures stockées ne sont donc nullement affectées.

Une fonction stockée est déterministe si elle produit toujours le même résultat lorsqu'elle est utilisée avec les mêmes valeurs de paramètres. 

Concrètement, lorsqu'une fonction est déterministe, MySQL vérifiera s'il l'a déjà exécutée avec les mêmes valeurs de paramètres. Si oui, il pourrait retourner ce qui avait été retourné la dernière fois, sans même réexécuter le code de la fonction.

Par défaut, la fonction stockée sera non déterministe.

Il est possible d'indiquer si une fonction stockée est déterministe en cochant la case « est déterministe » ou, si vous utilisez l'instruction CREATE FUNCTION, en précisant le mot-clé DETERMINISTIC.

Ex :

MySQL

CREATE FUNCTION etat_voiture(code_etat INT) RETURNS STRING DETERMINISTIC

CONTAINS SQL

BEGIN

   ...

   RETURN ...;

END!!

Selon la documentation de CREATE FUNCTION sur le site officiel de MySQL, le fait de déclarer  une fonction non déterministe avec le mot-clé DETERMINISTIC peut causer de mauvais résultats puisque l'optimiseur sera induit en erreur.

Inversement, le fait de déclarer une fonction déterministe sans le mot-clé DETERMINISTIC ou encore avec les mots-clés NOT DETERMINISTIC peut causer des problèmes de performance puisque des options d'optimisations ne pourront pas être utilisées.

Dans le doute, il est préférable de déclarer la fonction non déterministe puisqu'un résultat incorrect est plus grave qu'un léger ralentissement dans le traitement.

Pour plus d'information

« 13.1.12 CREATE PROCEDURE and CREATE FUNCTION Syntax ». MySQL. http://dev.mysql.com/doc/refman/5.7/en/create-procedure.html

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre