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

SQL Firebird Discussion :

optimisation d'une requete


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    866
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 866
    Par défaut optimisation d'une requete
    Bonjour

    j'ai écrit ce petit bout de code pour afficher les 500 derniers enregistrements d'une table qui en compte 80000.

    j'utilise une requete pour calculer le nombre max de ligne et je me sers de ce nombre dans la 2ème requete pour utiliser le fonction rows .

    ce fonctionne bien mais je voudrais savoir si il est possible d'optimiser ce code en une seule requete ?

    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
    17
    18
    19
    20
    21
     
    procedure TForm2.Button1Click(Sender: TObject);
    var
    com:integer;
    begin
     
    ibquery1.close;
    ibquery1.SQL.Clear;
    ibquery1.SQL.Add('select count(*) as nb from cmdsup');
    ibquery1.Open;
     
    com:=ibquery1.FieldByName('nb').AsInteger;
     
    ibquery1.close;
    ibquery1.SQL.Clear;
    ibquery1.SQL.Add('select * from cmdsup');
    ibquery1.SQL.Add('order by id_cmdsup asc ');
    ibquery1.SQL.Add('rows :com - 500 to :com');
    ibquery1.ParamByName('com').AsInteger:=com;
    ibquery1.Open;
    end;
    au début pour faire simple j'avais fait comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ibquery1.close;
    ibquery1.SQL.Clear;
    ibquery1.SQL.Add('select * from cmdsup');
    ibquery1.SQL.Add('order by id_cmdsup desc ');
    ibquery1.SQL.Add('rows 500');
    ibquery1.Open;
    mais les utilisateurs n'aiment pas l'ordre de classement.
    Ils préfèrent avoir un classement du "haut vers le bas" dans une grille


    cordialement

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    D'abord comme dit Ann W. Harrison :
    The *worst* feature in SQL is "select *". It's a holdover
    from an interactive pedagogical language circa 1974 that
    has no place in a programming language. It defeats the
    use of one of the major features of relational databases -
    the separation of logical and physical storage. If you
    realize after you've built your application that you really
    need a Skype handle as well as a phone number, just add it.
    As long as you've used field names in your queries, everything
    old works just the way it did and new queries and updated
    queries can use the Skype handle. But put one Select *
    into the mix and you've got chaos.

    The second worst is an insert without a target field list.
    sinon en considérant que ID est la clé primaire de ta table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select TB1.id_cmdsup  from cmdsup as TB1
    JOIN (SELECT ID FROM cmdsup 
              order by id_cmdsup desc
              rows 500) AS TB2 ON TB2.ID=TB1.ID
    ORDER BY id_cmdsup
    sinon tu reclasses dans ta grille

  3. #3
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    Par défaut
    Préférez toujours donner la liste des colonnes que vous sélectionnez...
    Sinon pour votre problème, je dirais quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select skip ((select count(*) - 500 from cmdsup)) * from cmdsup
    order by id_cmdsup asc;

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

Discussions similaires

  1. Optimisation d'une requete "TOP 5"
    Par gregb34 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 04/05/2006, 17h17
  2. Réponses: 5
    Dernier message: 14/04/2006, 18h58
  3. Optimisation d'une requete récurrente
    Par winzou dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 23/01/2006, 22h07
  4. Optimisation d'une requete specifique
    Par Tchinkatchuk dans le forum Langage SQL
    Réponses: 9
    Dernier message: 16/12/2005, 14h14
  5. optimisation d'une requete de recherche
    Par moog dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 06/04/2005, 16h58

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