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

Bases de données Delphi Discussion :

Probleme d'optimisation (Delphi7+firebird1.5)


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 40
    Points : 32
    Points
    32
    Par défaut Probleme d'optimisation (Delphi7+firebird1.5)
    Bonsoir
    j'ai deja poste ce message dns la artie base de donnée du forum,mais je me disque peut etre il y a un moyen d'optimiser cela aussi avec delphi (par le clientdataset)ou autre chose....

    Est ce que qq pourrai m'aider a optimiser cette requete SVP ?
    j'utilise firebird 1.5 (delphi 7,mais pas important just la partie quoted...c juste mon texte a recherche)
    j'aimerai avoir juste les fournisseurs qui correspondent a mon texte de recherche!!!!
    apres bcp d'essai j'ai trouvé cette requete, mais meme ne mono poste , elle prend quand meme 2 sec pour s'executer avec seulement 6 enregistrement, donc je l'imagine mal avec une centaine d'enregistrement et en client serveur!!!

    Merci d'avance
    Voici ma requete :
    'select '+
    'FOURNISSEUR_CD,'+
    'FOURNISSEUR_FAX,'+
    'FOURNISSEUR_MAIL,'+
    'FOURNISSEUR_TEL,'+
    'FOURNISSEUR_ADR,'+
    'FOURNISSEUR_NOM,'+
    'FOURNISSEUR_NOREGC,'+
    'FOURNISSEUR_CP,'+
    'FOURNISSEUR_VILLE,'+
    'FOURNISSEUR_WEB,'+
    'FOURNISSEUR_IDFFISC,'+
    'FOURNISSEUR_BNKNOM,'+
    'FOURNISSEUR_BNKADR,'+
    'FOURNISSEUR_BNKVILLE,'+
    'FOURNISSEUR_OBS,'+
    'FOURNISSEUR_DATEC,'+
    'FOURNISSEUR_TYPE,'+
    'FOURNISSEUR_FRMJUR,'+
    'DES_TYPE,'+
    'FRMJ_NOM '+
    ' from fourniture_bc_v,ENTETE_BC_V,FOURNISSEUR_V '+
    ' where '+
    ' fourniture_bc_v.CD_BC=entete_bc_v.CODE_BC '+
    ' AND entete_bc_v.FOURNISSEUR_NOM = FOURNISSEUR_V.FOURNISSEUR_NOM '+
    ' and '+
    '( '+
    'UPPER('+
    'fourniture_bc_v.DES_NOM) like '+quotedstr('%'+UPPERCASE(edt_rech.Text+'%'))+
    ') OR ('+
    'Upper(FOURNISSEUR_CD) LIKE '+quotedstr(UPPERCASE('%'+edt_rech.Text+'%'))+
    'OR Upper(FOURNISSEUR_NOM) LIKE '+quotedstr(UPPERCASE('%'+edt_rech.Text+'%'))+
    'OR Upper(FOURNISSEUR_ADR) LIKE '+quotedstr(UPPERCASE('%'+edt_rech.Text+'%'))+
    'OR Upper(FOURNISSEUR_TEL) LIKE '+quotedstr(UPPERCASE('%'+edt_rech.Text+'%'))+
    'OR Upper(FOURNISSEUR_FAX) LIKE '+quotedstr(UPPERCASE('%'+edt_rech.Text+'%'))+
    'OR Upper(FOURNISSEUR_OBS) LIKE '+quotedstr(UPPERCASE('%'+edt_rech.Text+'%'))+
    ') '+
    ' GROUP BY '+
    'FOURNISSEUR_CD,'+
    'FOURNISSEUR_FAX,'+
    'FOURNISSEUR_MAIL,'+
    'FOURNISSEUR_TEL,'+
    'FOURNISSEUR_ADR,'+
    'FOURNISSEUR_NOM,'+
    'FOURNISSEUR_NOREGC,'+
    'FOURNISSEUR_CP,'+
    'FOURNISSEUR_VILLE,'+
    'FOURNISSEUR_WEB,'+
    'FOURNISSEUR_IDFFISC,'+
    'FOURNISSEUR_BNKNOM,'+
    'FOURNISSEUR_BNKADR,'+
    'FOURNISSEUR_BNKVILLE,'+
    'FOURNISSEUR_OBS,'+
    'FOURNISSEUR_DATEC,'+
    'FOURNISSEUR_TYPE,'+
    'FOURNISSEUR_FRMJUR,'+
    'DES_TYPE,'+
    'FRMJ_NOM'

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Déjà le GroupBy ne semble peu utile puisqu'il n'y a pas d'aggrégation ...
    Faire des jointures sur des noms au lieu de le faire sur des ID Entier AutoInc (voir Trigger) n'aide pas non plus à la performance ...

    Ensuite, en MySQL, il n'y a pas de sensibilité à la casse par défaut, en FireBird, je ne m'en souvient plus, mais il me semble qu'il est sensible, donc malheureusement les UPPER coute énormement surtout que ta clause étant un OR ce qui est encore plus couteux ... enfin les like, même avec un index sur chaque champ, resteront long puisque c'est une comparaison lente... ensuite, effectivement, il faudrait regarder le packetrecord pour réduire le nombre d'enregistrement envoyé, ainsi tu récupéres quelques enregistrement, tu les affiches ou tu calculs, et pendant ce temps, le serveur continue à gérer la requête, et tu récupères ainsi des enregistrement par paquet ... mais je n'ai utilisé que le TIBQuery et je n'ai pas souvenir d'avoir la gestionnaire de page de données

    c'est classique, la recherche fonctionnelle qu'aime les clients c'est lourd ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    salut

    Effectivement ton Group By est inutile puisque tu n'utilises pas de fonction d'aggregat.

    Ensuite je confirme effectivement que Firebird est 'Case sensitive'. De plus les conditions de type: where ... like '%AAA%' n'utiliserons jamais les index.

    Donc pour optimiser ta requête à part définir tes jointures avec des 'inner join', je crois qu'il va être difficile de vraiment rendre ta requête performante.

    En conclusion, je citerai Shai:
    Citation Envoyé par ShaiLeTroll
    c'est classique, la recherche fonctionnelle qu'aime les clients c'est lourd ...
    @+

  4. #4
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 40
    Points : 32
    Points
    32
    Par défaut
    Ah!! Merci bcp pour vos reponses, j'essaye de gagner du temps au max , je vais dabord les separé en deux parties, la ou il y a le grand or!!!je proposera a celui qui veut cherhche d'utiliser une des deux, je gagnera surement la moitié du temps, malheureusement j'utilise dbexpresse comem moyen de connection et je 'ai pas trouvé le moeyen dele faire

    Merci encore pour votre aide et pour vos explications (en réalité c ce que j'espérai)
    A bientot j'espere...

    Cordialement nassim!

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

Discussions similaires

  1. Probleme d'optimisation à plusieurs variables
    Par arabimouh dans le forum MATLAB
    Réponses: 3
    Dernier message: 30/01/2008, 14h18
  2. probleme d'optimisation d'une macro
    Par ylabarre dans le forum VBA Outlook
    Réponses: 5
    Dernier message: 28/09/2007, 16h40
  3. probleme d'optimisation de fonction
    Par franc82 dans le forum C++
    Réponses: 3
    Dernier message: 31/10/2006, 09h45
  4. [Probleme Changé]Optimisation de l'affichage de jeu
    Par RadicalBob dans le forum Langage
    Réponses: 23
    Dernier message: 18/06/2006, 04h07
  5. [VBA-E]Probleme d'optimisation
    Par sk8bcn dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 30/05/2006, 20h14

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