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 Oracle Discussion :

Requête SQL de comptage intelligente


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    143
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 143
    Points : 69
    Points
    69
    Par défaut Requête SQL de comptage intelligente
    Bonjour,

    Je travaille sur Oracle 10g.

    Je souhaite écrire une requête SQL du style COUNT mais qui s'arrête (et à la rigueur renvoie le résultat = 101 par exemple) dès qu'elle a trouvé plus de 100 enregistrements.

    Actuellement je fais une requête COUNT standard puis traite le cas lorsque le nombre dépasse 100, mais la table est volumineuse (600000 données et 2000000 en prévision) et donc le COUNT est assez long. Pareil avec une requête utilisant un ROWNUM.

    Une procédure stockée semble être une bonne solution ?

    A vos idées et conseils ! Merci !

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Le rownum est le moyen le plus simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select count(*)
    from tatable
    where conditions
    and ROWNUM <= 100

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    J'ai un peu de mal à conceptualiser votre besoin néanmoins la solution rownum me paraît la meilleure.

    J'ai ici une table de vente (partitionnée, indexée, analysée) qui contient 21M de lignes, le count(*) tourne en moins de deux secondes.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 207
    Points : 237
    Points
    237
    Par défaut
    Bonsoir,

    Comme le dit Waldar, difficile de t'aider sans réellement savoir ce que tu veux faire. Tu estimes que tes tables auront une forte volumétrie, donc quel interêt à faire à select count(*) avec un rownul <100 puisque ce sera toujours vrai.

    Par ailleurs si le count(*) prends du temps, c'est que potentiellement ca sent le manque de clé primaire ou d'un index sur une colonne not null et du coup pour faire le count, oracle fait un full sur les tables. Si en plus, y a du chainage....

    LAO.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 280
    Points : 344
    Points
    344
    Par défaut
    Salut,
    Essaye cette requete qui permet de ne faire un comptage que sur les X lignes repondant a des conditions (une sorte de pre-filtrage)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT COUNT(*)
    FROM (
      SELECT 1 FROM mytable WHERE myconditions AND ROWNUM<101)
    ---
    Farid

Discussions similaires

  1. Requête SQL
    Par Leludo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/07/2024, 15h41
  2. [ DB2 ] [ AS400] requête sql
    Par zinaif dans le forum DB2
    Réponses: 6
    Dernier message: 23/08/2008, 19h42
  3. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  4. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26
  5. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37

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