IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Quel est le meilleur choix entre procédure stokée et function


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 80
    Points : 54
    Points
    54
    Par défaut Quel est le meilleur choix entre procédure stokée et function
    Bonjour,

    j'ai un ensemble de udfs (20 FONCTIONS SCALAR UDF) et je veux exécuter ces dernières de manière séquentielle.
    est ce que je crée une fonction qui va exécuter les 20 fonctions ou bien je vais intégrer ces fonctions dans une procédure stockée?

    MA DEUXIÈME QUESTION:
    qui génère le moins de temps d’exécution et qui ne consomme pas bcp de bande passante(application client/serveur)?

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Hello,

    Il faut voir dans le détail ce que font tes fonctions mais en général les fonctions scalaires sont beaucoup moins performante car elles sont bien souvent évaluées autant de fois qu'il y a de lignes retournées dans le résultat final.

    Maintenant transformer tes fonctions en procédure stockée va, je pense, nécessiter un redesign du code de celles-ci avec une vue globalement plus ensembliste et donc plus performante ... mais là encore il faut voir en détail ce que font tes fonctions et dans quelles contextes elles sont utilisées

    ++

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Si tes méthodes doivent renvoyer des données directement accessibles depuis un query, tu dois utiliser des fonctions.
    Sinon, une procédure stocker fait l'affaire.

    Si tu as un doute et souhaite une réponse sur mesure, tu peux toujours expliquer ce que font tes fonctions.
    Most Valued Pas mvp

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 80
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    Hello,

    Il faut voir dans le détail ce que font tes fonctions mais en général les fonctions scalaires sont beaucoup moins performante car elles sont bien souvent évaluées autant de fois qu'il y a de lignes retournées dans le résultat final.

    Maintenant transformer tes fonctions en procédure stockée va, je pense, nécessiter un redesign du code de celles-ci avec une vue globalement plus ensembliste et donc plus performante ... mais là encore il faut voir en détail ce que font tes fonctions et dans quelles contextes elles sont utilisées

    ++
    bonjour
    merci mikedavem pour ton aide
    voici un example qui montre comment mes fonctions sont créées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    create FUNCTION [dbo].[salaire]
    (
    	@id_fonctionnaire int
    )
    RETURNS decimal (10,2)
    AS
    BEGIN
    	declare @variable int 
    	set @variable =
    (SELECT     TOP (100) PERCENT dbo.categorie1.ind
    FROM         jointures entre 3 tables
     
    where dbo.employés.id_employe=@id_fonctionnaire)
     
    	RETURN @variable*100
    END
    ces fonctions servent a calculer la paie de 600 fonctionnaires
    chaque fonction est un élément de la paie d'un fonctionnaire
    ce que je veux faire avec 20 fonctions est
    calculé la paie de ces 600 personnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    use paie
    go
     
    insert into table_paie
    select
    1,id_fonctionnaire,MONTH(GETDATE()),dbo.fonction1(id_employe),year(GETDATE())
    from dbo.fonctionnaire
    go
     
    insert into table_paie
    select
    2,id_fonctionnaire,MONTH(GETDATE()),dbo.fonction2(id_employe),year(GETDATE())
    from dbo.fonctionnaire
    go
    DONC mes fonctions font faire
    récupérer les données a partir d'une base de données
    après ils font faire des calcules
    après l'insertion des valeurs générer par les fonctions

    donc mes fonctions vont faire bcp de calcules
    dans ce cas quel est le meilleur choix?
    Merci d'avance

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 716
    Points : 52 380
    Points
    52 380
    Billets dans le blog
    4
    Par défaut
    Quel est l'intérêt de cette horreur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT     TOP (100) PERCENT dbo.categorie1.ind
    FROM         jointures entre 3 TABLES
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Cette fonction devrait être réécrite en fonction table en ligne. Ce serait beaucoup plus performant.

    Après... il faudrait voir les autres.

    Sinon, pourquoi ne pas créer des vues ? ce serait sûrement plus simple a utiliser et à maintenir.

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 80
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Quel est l'intérêt de cette horreur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT     TOP (100) PERCENT dbo.categorie1.ind
    FROM         jointures entre 3 TABLES
    A +
    j'ai écris ce code juste pour explique mon idée (ce n'est pas le code que j'utilise dans ma fonction )
    j'aurai aimé que vous m'aider a trouver une solution a mon problème ?

Discussions similaires

  1. Java ou PHP : Quel est le meilleur choix?
    Par gui38 dans le forum Linux
    Réponses: 5
    Dernier message: 02/11/2006, 14h31
  2. [PostgreSQL-Firebird/Interbase6]Quel est le meilleur choix?
    Par kedare dans le forum Décisions SGBD
    Réponses: 9
    Dernier message: 28/03/2006, 17h30
  3. Réponses: 5
    Dernier message: 25/03/2006, 01h10
  4. Une table ou deux - quel est le meilleur choix
    Par DG dans le forum Débuter
    Réponses: 3
    Dernier message: 09/03/2006, 19h04
  5. SDBD "Gratuit" : Quel est le meilleur choix ?
    Par ZZZzzz2 dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 30/03/2005, 16h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo