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

Requêtes et SQL. Discussion :

SQL fonctions gourmandes


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 344
    Points : 104
    Points
    104
    Par défaut SQL fonctions gourmandes
    Bonjour,
    je souhaiterai savoir s'il existe quelque part un document ou bien des avis d'experts qui pourraient me dire ce qui dans un code SQL est susceptible d'être gourmand ou pas.
    J'utilise PL/SQL sur des très gros tables (+100 000 000 enr) mais n'ai pas accès ni la trace ni à la structure des tables (index...) donc je manipule un peu en aveugle.
    Et donc parfois ça rame fort.

    Quelques exemples
    Des fonctions de type SUBSTR ou TO_CHAR, ou des concaténations, soit dans le SELECT ou le WHERE ou des IN ou <> dans le WHERE...
    bref est ce qu'il y a des fonctions à proscrire car potentiellement trop gourmandes ?

    ou bien si c'est simplement la volumes de données et les jointures utilisées qui font que ça rame

    merci de vos avis
    Laurent

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 184
    Points : 1 363
    Points
    1 363
    Par défaut
    Bonjour,

    Tu travailles comment ?
    Tables Access ? Tables sur un autre SGBD ? Lequel ?
    Tables liées ? SQL direct ? Autre ?

  3. #3
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour lbar012001,

    La question primordiale est de savoir si PL/SQL est capable de définir, de lui-même, l'index à utiliser, même si la requête utilise la table "physique". Autrement dit, si PL/SQL optimise le chemin d'accès aux données (index) à partir de la table "physique".
    • si oui, c'est un premier point positif ;
    • si non, donc si PL/SQL n'analyse que la(es) table(s) indiquée(s) dans la clause FROM sans s'occuper des index, alors tu devras connaître le nom des index et les champs composant cet index pour optimiser la requête.

    En tout état de cause, une liste (non exhaustive) des comportements gourmands en ressource :
    • une jointure est plus gourmande qu'une table unique : évident... ;
    • la clause GROUP BY : elle regroupe des records, pas forcément dans l'ordre "physique", par un ensemble de champs défini ;
    • dans la clause WHERE, les LIKE "*xyz" et LIKE "*xyz*" sont très gourmands car SQL "se balade" à l'intérieur du champ concerné (tous les caractères) pour tous les records. Contrairement à LIKE "xyz*" qui se contente de sélectionner "commence par".

    D'une manière générale, il suffit de se mettre à la place de la machine pour "sentir" le travail à effectuer.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 344
    Points : 104
    Points
    104
    Par défaut
    merci,

    en fait je me suis rendu compte d'un truc qui change tout

    j'ai 2 champs A et B contenant chacun des codes de 2 caractères

    Si dans le where je mets du
    ça va vite

    Si je mets du ça marche vite aussi

    Par contre si je concatène, et j'ai souvent besoin de faire ça, en faisant du
    là ça rame complètement.

  5. #5
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Si tu te mets à la place de la machine, le job à effectuer à chaque enregistrement, pour tes 100.000.000 records, ce n'est pas réellement étonnant.

    Tu es dans un forum Access... peut-être existe-t-il un forum PL/SQL.

    Néanmoins, si PL/SQL ressemble à SQL Server, une "vue" avec ces deux champs concaténés pourrait réduire, significativement, ton temps de traitement.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 344
    Points : 104
    Points
    104
    Par défaut
    En fait c'est la concaténation dans le WHERE qui fait tout ramer, dans le SELECT ou dans le GROUP BY, pas de souci.
    Merci en tout cas.
    Laurent

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AccessXP][SQL]Fonction NZ() et concaténation
    Par steelidol dans le forum Access
    Réponses: 3
    Dernier message: 08/10/2005, 19h27
  2. Réponses: 4
    Dernier message: 18/08/2005, 17h11
  3. Réponses: 5
    Dernier message: 13/07/2005, 11h03
  4. [PL/SQL] fonction et alter session
    Par aline dans le forum Oracle
    Réponses: 10
    Dernier message: 26/01/2005, 16h23
  5. [PL/SQL] Fonction qui retourne plusieurs valeurs
    Par Loko dans le forum Oracle
    Réponses: 2
    Dernier message: 07/12/2004, 10h43

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