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

Oracle Discussion :

[9i] Recupérer le nombre de lignes dans une table


Sujet :

Oracle

  1. #1
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 175
    Points : 59
    Points
    59
    Par défaut Recupérer le nombre de lignes dans une table Oracle
    Bonjour,

    J'utilise une base Oracle 9i. Je souhaite récupérer le nombre de ligne à partir d'une requête SQL mais je ne veux pas d'un select count(*) from...... car cette dernière fait un full scan coûteux sur la table. Comment alors faire autrement en utilisant peut-être par exemple une vue Oracle ?

    Merci pour votre aide

  2. #2
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 125
    Points : 125
    Points
    125
    Par défaut
    Citation Envoyé par marti
    Bonjour,

    J'utilise une base Oracle 9i. Je souhaite récupérer le nombre de ligne à partir d'une requête SQL mais je ne veux pas d'un select count(*) from...... car cette dernière fait un full scan coûteux sur la table. Comment alors faire autrement en utilisant peut-être par exemple une vue Oracle ?

    Merci pour votre aide
    Pourrais-tu preciser un petit peu ?
    Dans le titre tu veux savoir le nombre de lignes d'une table et ensuite tu parles d'une requete...

    Donc si c pour une table, c clair qu'un count(*) peut s'averer couteux si la table est grosse. Cependant si elle dispose d'un PK et d'une sequence et qu'il n'y a pas de trou (registres effaces), un simple SELECT MA_SEQ.currval FROM DUAL fera l'affaire.

    Si c pour une requete, je vois pas d'autre solution qu'un SELECT COUNT(*) FROM (/*TA_REQUETE*/).
    Cependant, dans ce cas, si ta requete est suffisement optimisee, ca ne devrait pas prendre trop de tps...

  3. #3
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    num_rows de dba_tables si les stats sont à jours à part ça et count(*)... tu peux pas

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 95
    Points
    95
    Par défaut
    Au lieu de count(*), tu peux déjà faire un select count('r') c'est moins couteux

  5. #5
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par Harry Potter
    Au lieu de count(*), tu peux déjà faire un select count('r') c'est moins couteux
    Ca c'est une légende urbaine.

  6. #6
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    si au lieux de faire un count(*) tu fais un count sur la colonne de clef primaire, y a pas de full table scan ! Oracle passe par l'index de ta clef primaire !

  7. #7
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    FTS ou FULL INDEX SCAN ça changera rien en terme de perf... le count(*) moins performant est un mythe

  8. #8
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    Citation Envoyé par Fred_D
    FTS ou FULL INDEX SCAN ça changera rien en terme de perf...
    oui, mais voir un index scan dans son plan d'exécution fait moins peur que le Full Table Scan...

    il y a encore trop de gens qui veulent à tout prix bannir tous les full table scan... alors que dans certains cas ils sont la meilleure solution

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 77
    Points : 84
    Points
    84
    Par défaut
    Moi, c'est quasi le contraire... Comme je suis sur du BI, je dépasse systématiquement les seuils qui font qu'un index est interressant...

    Je m'inquiéte donc quand je vois un nested loop ou un accès index (pourquoi ce c... va me lire x fois ma table de x Go !!!)

  10. #10
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Le comptage fait généralement un FAST FULL SCAN sur la clef primaire ce qui est beaucoup moins couteux. Vouloir le nombre de lignes d'une table sans les compter, c'est une demande un peu paradoxale...

    Si on veux juste un volume sans avoir le nombre exact on peux aller chercher la colonne NUM_ROWS de la vue USER_TABLES ou ALL_TABLES. Ca va donner le nombre de ligne lors du dernier passage de stats.

  11. #11
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Citation Envoyé par Fred_D
    le count(*) moins performant est un mythe
    Ah bon ? Il me semble justement que c'est toi qui m'avait conseillé les count(1) plutôt que les count(*) il y a un an sur ce même forum...

  12. #12
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    si c'est le cas c'est probablement pour simplifier l'écriture... ou alors j'avais tord

Discussions similaires

  1. nombre de lignes dans une table selon valeur
    Par halimux dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/01/2014, 10h55
  2. Compter le nombre de lignes dans une table
    Par foudesbois dans le forum VBA Word
    Réponses: 4
    Dernier message: 15/02/2013, 14h21
  3. Nombre de lignes dans une table
    Par emytom0308 dans le forum Oracle
    Réponses: 3
    Dernier message: 02/02/2012, 22h56
  4. tables SYSINDEXES - Comptage nombre de lignes dans une tables
    Par Labienus dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/04/2008, 23h20
  5. Réponses: 8
    Dernier message: 20/06/2005, 15h10

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