Je veux créer une "vue" pour éliminer la même sous-requête de trois lignes d'environ 90 requêtes dans une application sur laquelle je travaille.L'utilisation d'une procédure stockée en tant que vue "dynamique"?
Le problème est le sous-requête contient une condition basée sur une variable.
SELECT * FROM items WHERE id NOT IN (
SELECT item_id FROM excluded_items WHERE user_id = 123
);
Si ce n'était pas variable, je pourrais simplement faire une vue et en avoir fini avec elle.
Je ne suis pas sûr de ce qu'il faut faire dans ce cas cependant. En adoptant la même mentalité derrière une vue que je suis tenté de faire une procédure stockée qui renvoie le jeu d'enregistrement souhaité, afin qu'il puisse être appelé quelque chose comme ceci:
SELECT * FROM user_items(123);
Maintenant, j'ai un seul endroit pour mettre à jour cet article l'exclusion et d'autres conditions, mais je ne suis pas sûr de savoir comment l'indexation est affectée si je veux joindre les résultats de ce SP contre d'autres tables?
Alors est-ce bon/mauvaise pratique? Y a-t-il une autre façon de le faire, ou devrais-je simplement l'aspirer et continuer à répliquer cette sous-requête?
Merci Elie. J'ai effectivement analysé les requêtes tout en actualisant cette page :-) Jusqu'à présent les SP sont plus lents mais les différences sont négligeables. Je pense que je suis vraiment intéressé de savoir s'il y a des pièges à côté de la performance que je n'ai pas pris en compte. Jusqu'à présent, le consensus semble être de rouler avec les PS, merci pour votre réponse! –