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

MS SQL Server Discussion :

Requete SQL - Optimisation function avec nombreux parametres


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 13
    Points : 11
    Points
    11
    Par défaut Requete SQL - Optimisation function avec nombreux parametres
    Bonsoir à tous,

    Je travaille en SQL 2000.

    (Je fais ce topic sans utiliser les requetes developpé sur mon pc, merci de ne pas faire trop attention à la syntaxe - Je me suis également trompé d'onglet pour la publication du post)

    Je viens vers vous pour essayer de trouver un moyen d'optimisation d'une function.
    Je souhaite faire une function avec beaucoup de parametres : 9
    Il s'agit de jeux de parametre qui me permettent de satisfaires tous mes éventuels besoin d'iinvestigation.


    Dans une SP je peux ainsi faire
    SELECT* FROM MaFunction (@Param1, NULL,NULL,@Param2, NULL,NULL,@Param3, NULL,NULL)


    La function est de la forme :

    CREATE FUNCTION MaFunction
    (
    @Par1 as varchar(100),@Par2 as varchar(100),
    @Par3 as varchar(100),@Par4 as varchar(100),
    @Par5 as varchar(100),@Par6 as varchar(100),
    @Par7 as varchar(100),@Par8 as varchar(100),
    @Par9 as varchar(100))
    SELECT PRID.Id, SRID.Id, PN.Value FROM Maview
    WHERE
    (PRID LIKE @Par1 OR PRID LIKE @Par2 OR PRID LIKE @Par3)
    AND
    (SRID LIKE @Par4 OR SRID LIKE @Par5 OR SRID LIKE @Par6)
    AND
    (PN.Value LIKE @Par7 OR PN.Value LIKE @Par8 OR PN.Value LIKE @Par9)


    Mon soucis est que à mon sens cette requete nest pas performante. J'utilise systematiquement des jeux de 3 parametres sans forcément en avoir besoin.
    Pourriez vous me donner des pistes afin d'optimiser ma function, par rapport au paramètres passés tout en concervant ces 9 parametres ?

    Cordialement

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 837
    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 837
    Points : 52 922
    Points
    52 922
    Billets dans le blog
    5
    Par défaut
    La présence de l'opérateur OR empêche toute optimisation. Transformez vos OR en différentes requêtes UNION ALL.

    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/ * * * * *

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Merci pour ta réponse.

    SELECT PRID.Id, SRID.Id, PN.Value FROM Maview
    WHERE
    (PRID LIKE @Par1 OR PRID LIKE @Par2 OR PRID LIKE @Par3)
    AND
    (SRID LIKE @Par4 OR SRID LIKE @Par5 OR SRID LIKE @Par6)
    AND
    (PN.Value LIKE @Par7 OR PN.Value LIKE @Par8 OR PN.Value LIKE @Par9)

    devient de ce fait, une requete ressemblant a :

    SELECT PRID.Id, SRID.Id, PN.Value FROM Maview
    WHERE
    PRID LIKE @Par1
    UNION ALL
    SELECT PRID.Id, SRID.Id, PN.Value FROM Maview
    WHERE
    PRID LIKE @Par2
    UNION ALL
    SELECT PRID.Id, SRID.Id, PN.Value FROM Maview
    WHERE
    PRID LIKE @Par3
    UNION ALL
    SELECT PRID.Id, SRID.Id, PN.Value FROM Maview
    WHERE
    SFID LIKE @Par4
    etc...

    1- Juste pour ma culture, en "apparence" la requete devient bcp plus longue à écrire, comment savoir le gain de performance ?

    2- J'ai lu des sujets sur le case. Je pensais pouvoir moduler le requete sql en fonction des parametres passés. Cependant les case fontionnants sont de la forme :
    CASE = etc...
    ce qui n'est pas, hélas pour moi :
    CASE LIKE ....
    Existe t il un moyen, dans une fonction, d'arriver à une création de requete dyamique ?

    Cordialement

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 837
    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 837
    Points : 52 922
    Points
    52 922
    Billets dans le blog
    5
    Par défaut
    1- Juste pour ma culture, en "apparence" la requete devient bcp plus longue à écrire, comment savoir le gain de performance ?
    Utilisez SET STATISTICS IO ON pour savoir le nombre de pages de données lues par les deux requêtes. Si vous avez des index sur les colonnes scrutées, vous verrez la différence.

    Existe t il un moyen, dans une fonction, d'arriver à une création de requete dyamique ?
    Une fonction SQL n'accepte pas de SQL dynamique.
    Notez que la CASE est optimisable par SQL Server.

    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/ * * * * *

Discussions similaires

  1. requete SQL clause WHERE avec variable
    Par gabule dans le forum JDBC
    Réponses: 6
    Dernier message: 09/01/2019, 11h04
  2. requete sql en vba avec un select MAX
    Par alexkickstand dans le forum VBA Access
    Réponses: 2
    Dernier message: 29/05/2007, 15h59
  3. [SQL]Problème requete sql sous access avec vba
    Par aaliyan dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 13/04/2007, 18h53
  4. Réponses: 8
    Dernier message: 02/02/2006, 18h13
  5. Requete SQL ajout Souci avec ""
    Par patrick55 dans le forum Access
    Réponses: 1
    Dernier message: 10/12/2005, 18h11

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