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

Langage SQL Discussion :

Requête à optimiser


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2008
    Messages : 30
    Par défaut Requête à optimiser
    Bonjour à tous,

    Alors voilà, je cherche à optimiser une requête parce que celle que j'ai pour l'instant est un peu longue à s'exécuter.

    Mon but est d'obtenir tous les sous répertoire d'un chemin donnée, par exemple si je veux les sous-répertoires de Rep2 :

    \\NomServeur\Rep1\Rep2\Rep3\abc1.jpg
    \\NomServeur\Rep1\Rep2\Rep3\abc2.jpg
    \\NomServeur\Rep1\Rep2\Rep5\abc3.jpg
    \\NomServeur\Rep1\Rep2\Rep5\Rep6\abc4.jpg
    \\NomServeur\Rep1\Rep2\Rep7\abc.jpg
    \\NomServeur\Rep1\Rep2\Rep8\abc.jpg
    ...

    J'aurais : Rep3, Rep5, ...

    Voilà pour l'instant je fais une requête toute simple pour tout récupérer :

    SELECT path FROM table ORDER BY path

    Puis je fais un traitement en VB.NET pour supprimer le début du chemin (ici : \\NomServeur\Rep1\Rep2), récupérer la chaine après le \ (ici : Rep3, Rep3, Rep5, Rep5, ...), puis les stockés, sauf si elles sont déjà stocké !

    Mais voilà, si je pouvais déjà faire un 1er tri dans ma requête pour éliminer les débuts de chemin qui sont répétés :

    \\NomServeur\Rep1\Rep2\Rep3\abc1.jpg
    \\NomServeur\Rep1\Rep2\Rep3\abc2.jpg

    => N'en garder qu'un seul

    Ca m'arrangerait bien pour les traitement par derrières qui seront alors beaucoup plus rapide, mais comment faire ?

    Il me faudrait un distinct sur les "\\NomServeur\Rep1\Rep2\%\" sans tenir compte de la fin du chemin (abc1.jpg, abc2.jpg, ...).

    Quelqu'un a une idée (si c'est clair^^)

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bonjour, il s'agit de cosmétique, c'est à l'application de faire ce boulot.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2008
    Messages : 30
    Par défaut
    Merci pour la réponse,

    Oui je sais que c'est un peu tout mélanger de vouloir faire traiter ce genre de chose par une requête SQL, mais c'est pourtant la seule solution pour que je puisse réduire le temps de chargement de mon application.

    En fin de compte, j'ai utilisé une requête distribuées (obligé puisqu'avec IS on est trop limité en terme de syntaxe), la voilà :

    targetScope = "\\NomServeur\Rep1\Rep2"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT distinct left( substring(path, len(targetScope), len(path)-len(targetScope)-1), 
              charindex('\', substring(path, len(targetScope), len(path)-len(targetScope)-1))-1) 
                          FROM OPENQUERY( SERV, 
                                  'SELECT path 
                                           FROM SCOPE('' deep traversal of targetScope '')  ') 
                                                ORDER BY 1
    Le traitement est largement plus rapide grâce au distinct, après les traitements ne changent pas grands choses.

    En sortie, j'obtiens :

    Rep3
    Rep5
    Rep7
    Rep8

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 41
    Par défaut
    Salut Koukoula,
    Je pense que ton problème pourrait être trés facilement être résolu en changeant un peu ta modélisation. En éclatant l'Url par exemple, tu pourrais faire des requêtes sans aucun substring ou len... Ces instructions obligent le sgbd a travailler séquentiellement plutôt que de façon ensembliste. Il faudrait que tu modélises (sorte d'arbre) une table répertoire avec une récursive pour le répertoire parent. Cela demande un peu de boulot, mais le résultat devrait valeur la peine je pense....

  5. #5
    Membre éclairé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Par défaut
    Et au pire, si tu ne veux pas faire un arbre, un début serait d'avoir une colonne "path" et une autre "filename", qui te permettrai d'avoir des requêtes sans tout ça. Ce que propose Koukoula est mieux, mais à défaut, ça serait une bonne évolution ^^

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2008
    Messages : 30
    Par défaut
    Oui justement cette requête me sert pour créer un arbre en sortie. Donc elles ne sont pas exécutées à chaque fois.

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

Discussions similaires

  1. Sous-Sous-Requête: Optimisation possible ?
    Par FMaz dans le forum Requêtes
    Réponses: 11
    Dernier message: 03/04/2008, 03h49
  2. [SQL2K5] Plan de requête optimisable ?
    Par elsuket dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 31/08/2007, 11h33
  3. Réponses: 2
    Dernier message: 09/11/2006, 07h37
  4. Réponses: 10
    Dernier message: 20/10/2006, 16h36
  5. requête à optimiser
    Par tung-savate dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/10/2005, 07h38

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