Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/09/2008, 14h52   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 60
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 60
Points : 11
Points : 11
Par défaut Best practice : Procedure stockée ou Fonction

Bonjour

J'ai une question d'ordre "philosophique". Elle consiste en un choix d'utilisation d'une fonction ou d'une procédure stockée.

J'ai crée une procédure stockée qui contient un SELECT.
Il est "alimenté" par des données issues de tables mais aussi de variables implémentée par des calculs en amont du SELECT.
Je souhaiterais déporter ces calculs dans d'autres objets.
Techniquement, la chose semble possible aussi bien dans des "sous" procédures stockées mais aussi dans des fonctions.
Quelle solution est préférable et pourquoi.

Merci d'avance

Herve Aouate
rvaouate est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2008, 17h54   #2
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 35
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : septembre 2008
Messages : 35
Points : 36
Points : 36
bonjour,

je suis toujours embêter lorsque je vois les termes best pratice.

Sur le principe il y a pas un mieux que l'autre. Il faut utiliser le meilleur en fonction de ton besoin.
Les deux existes il y a une raison ...

Louis Malta
fan she est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2008, 18h16   #3
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 60
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 60
Points : 11
Points : 11
Justement, je désirerais connaitre ces raisons.
Je ne cherchais justement pas un principe mais la solution la plus adaptée à mon cas.
rvaouate est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2008, 18h37   #4
Nouveau Membre du Club
 
Inscription : septembre 2008
Messages : 35
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : septembre 2008
Messages : 35
Points : 36
Points : 36
Ok désolé,



Si tu veux la réutilisabilité les deux sont valables. Les fonctions sont une facilité mais dans certains cas peuvent être très coûteuse pour les perf.

Personnellement je passe plus facilement par des procs que des fonctions
Tous simplement pour une question de portabilité (nous avons encore des SQL 7 donc pas de fonction)
Je fais beaucoup de traitement de masse donc je passe beaucoup par des tables temporaires beaucoup performantes sur des gros volumes.

En même temps si tu dois rééffectuer les même calcules sur plusieurs endroits peut être ne devrais tu pas stocker le résultat du calcul en table.

Dans le doute
fait les deux et utilises : set statistics io on
et compare les stat tu sauras alors laquelle est la plus adaptée à ton cas.

Louis Malta
fan she est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2008, 20h57   #5
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 60
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 60
Points : 11
Points : 11
Super !!!
Merci beaucoup
rvaouate est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2008, 18h38   #6
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 793
Points : 17 793
Les fonctions table, c'est à dire renvoyant une table sont élégantes à utiliser si la requête se fera toujours sans jointure, sinon, c'est un cauchemar et il faut la plupart du temps utiliser les opérateurs d'intra jointure CROSS APPLY / OUTER APPLY.

Une procédure stockée est mieux paramétrable mais ne permet pas de faire de jointure.

Entre les deux il est difficile de dire ce qui est mieux. Cela dépend de ce que l'on va en faire !

Quand à cette affirmation :
Citation:
Je fais beaucoup de traitement de masse donc je passe beaucoup par des tables temporaires beaucoup performantes sur des gros volumes.
Elle est généralement fausse, mais vient du fait que la plupart des développeurs ne savent pas écrire des requêtes complexes. En effet l'usage de table temporaires oblige le serveur à des opérations d'écritures disque, opérations qui pourrait être évitées en formulant une seule requête en lieu et place d'un amalgame de requêtes sur table temporaires produisant d'autres tables temporaires... etc !
par exemple une récriture via CTE est souvent bien plus performante...

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h16.


 
 
 
 
Partenaires

Hébergement Web