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 :

2 tables ca va, 3 tables, bonjour les dégats


Sujet :

Oracle

  1. #21
    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
    Citation Envoyé par nuke_y
    Certes remi, mais est-ce qu'au niveau architecture il y a des préférences pour une table complètement couverte par un index ? Je veux dire, ça reste une table hein ? Il n'y a pas d'option particulière à lui préciser ? (à part l'index forcément)
    Si une table est compltement couverte par un index (ou presque completement) à ce moment là on spécifie la clause "ORGANIZATION INDEX" ça veux dire qu'il y a plus qu'une construction de clef primaire et que le reste des données suivent.

  2. #22
    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
    Ok, merci.

    J'ai bien fait de demander

  3. #23
    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
    Citation Envoyé par crazykangourou
    Merci pour vos précisions.

    Effectivement, j'ai une tres grosse table 20 colonnes, j'y peu rien, y'a pas eu de modélisation de la BD quand je suis arrivé ca existé déjà comme ca.
    Si je fais une table index, c'est a dire couvrant toutes les colonnes, je suppose que les performances seront réduites d'un autre coté, lesquel, insert? update ?

    Merci
    Attention, dans le cas d'une table à 20 colonnes, il nr faut surtout pas faire un index qui couvre toutes les colonnes, juste les 2/3 colonnes concernées par le comptage.

    C'est sur que plus il y a d'index plus les insertions seront lentes et plus les update des colonnes concernées par les index seront lent aussi... tout est une question d'équilibre...

    Citation Envoyé par crazykangourou
    Par exemple, si j'ai un index sur table1(col1,col2,col3,col4)
    et un autre sur table1(col1,col3)
    Ces 2 indexs ne sont pas à redondants au sens strict du terme mais le 2ieme n'est pas forcément très utile, tout dépend du taux de "discrimination" de ta colonne col1. Si pour une valeur donnée de col1, tu ne ramènes pas plus qu'une vingtaine de lignes, alors le fait de rajouter le 2ieme index ne t'amènera pas grand chose, par contre si une valeur de col1 donnée te ramène 10000 lignes alors là oui le 2ieme sera utile (mais à ce moment là c'est pas très judicieux de commencer l'index par une colonne aussi peu discriminante...)

    Citation Envoyé par crazykangourou
    avec
    index table1(col1,col2),

    si je rajoute un index sur table1 tel que :
    table1(col1)
    Par contre là, le 2ieme est complètement redondant avec le 1ier! pour savoir pourquoi il y a dégradation des perfs, il faudrait voir le plan d'exécution, il est possible qu'oracle choisisse de passer par le premier index puis de revenir dans le bloc de donnée pour faire la liaison avec la 2ieme colonne.

    D'autre part ta requête n'est pas terrible je trouve, il vaut mieux que tu fasse celle que t'a donnée plaineR avec les EXISTS. EXISTS, c'est l'instruction de filtrage, or ce que tu veux faire, c'est du filtrage... CQFD.

    Citation Envoyé par crazykangourou
    y' a t il une requete qui permet de supprimer TOUS les index d'UNE table donnée?
    Je ne crois pas, par contre tu as la vue USER_INDEXES qui te permetra d'avoir la liste de tous les index d'une table donnée.

  4. #24
    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
    J'utilise ça pour vider un schéma entier (ici nommé MON_USER). Tu peux l'adapter en remplacant la requête sur ALL_OBJECTS par la vue USER_INDEXES donnée plus haut par remi.
    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
    22
    23
    24
    25
    Declare
       CURSOR C_OBJ_NAME_TAB IS select OBJECT_NAME from ALL_OBJECTS where OWNER='MON_USER' and OBJECT_TYPE='TABLE';
       CURSOR C_OBJ_NAME_IDX IS select OBJECT_NAME from ALL_OBJECTS where OWNER='MON_USER' and OBJECT_TYPE='INDEX';
       CURSOR C_OBJ_NAME_PRO IS select OBJECT_NAME from ALL_OBJECTS where OWNER='MON_USER' and OBJECT_TYPE='PROCEDURE';
       CURSOR C_OBJ_NAME_VIE IS select OBJECT_NAME from ALL_OBJECTS where OWNER='MON_USER' and OBJECT_TYPE='VIEW';   
    Begin
     
       For Cur In C_OBJ_NAME_VIE Loop
       EXECUTE IMMEDIATE 'DROP VIEW '||'"MON_USER"'||'.'||'"'||Cur.OBJECT_NAME||'"';
       End Loop;
     
       For Cur In C_OBJ_NAME_PRO Loop
       EXECUTE IMMEDIATE 'DROP PROCEDURE '||'"MON_USER"'||'.'||'"'||Cur.OBJECT_NAME||'"';
       End Loop;
     
       For Cur In C_OBJ_NAME_TAB Loop
       EXECUTE IMMEDIATE 'DROP TABLE '||'"MON_USER"'||'.'||'"'||Cur.OBJECT_NAME||'"'||' CASCADE CONSTRAINTS';
       End Loop;
     
       For Cur In C_OBJ_NAME_IDX Loop
       EXECUTE IMMEDIATE 'DROP INDEX '||'"MON_USER"'||'.'||'"'||Cur.OBJECT_NAME||'"';
       End Loop;
     
    End;
    /

  5. #25
    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 ok on s'éloigne un peu du sujet...
    nuke_y:
    tu sais que quand tu as supprimé tes tables, ce n'est plus la peine de supprimer tes index, vu qu'ils ont été jetés avec...

    Si tu traçais ta dernière boucle je pense que tu constaterais que ton dernier curseur est toujours vide....

  6. #26
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut Dernières questions
    Bonsoir et encore merci à vous d'avoir bien voulut suivre cette discussion avec moi.

    Dernière question et je [resoud] le sujet si vous voulez bien sur...

    Remi4444 tu disais que
    si j'ajoute un index tel que
    table1(col1)
    alors qu'il existe deja un index
    table1(col1,col2)

    Le premier table1(col1) est, je te cite "complètement redondant".
    Est ce que au niveau des perfs c'est la même chose? bien sur si on interroge que sur la col1? Je pense quand même que c'est l'index table1(col1) qui aura de meilleurs résultats.

    J'aimerai bien utiliser la requete la plus pure de plaineR, mais mon parseur perd la boule pour des requetes compliquées et ne reconnait pas les mots clefs exists, il faudrait que je l'améliore.
    N'oublie pas, il injecte, compte, fais le café, mais faut pas trop lui en demander

    Nuke_y, merci pour ton code de suppression, il va m'être fort utile

    Voilà.
    Disez moi quand je peux clore la discussion et à bientot

  7. #27
    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
    Tu as sûrement raison remi, mais est-ce qu'il ne peut pas exister des index dans un schema qui portent sur des tables d'un autre schema ? Et dans ce cas, les tables de l'AUTRE schema n'ayant pas été supprimées, les index ne le sont pas non plus. Et si je ré-importe mon utilisateur complet, crash (ou pas d'ailleurs, mais c'est juste pour être sur).

    Il me semble que j'ai ce cas d'index et de tables qui n'appartiennent pas au même schéma, et que j'ai fait ça pour ça.

  8. #28
    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
    Citation Envoyé par nuke_y
    mais est-ce qu'il ne peut pas exister des index dans un schema qui portent sur des tables d'un autre schema ?
    j'ai déja vu beaucoup de trucs tordus, mais là j'avoue que je m'étais jamais encore posé la question! ça se teste......

  9. #29
    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
    Citation Envoyé par crazykangourou
    bien sur si on interroge que sur la col1? Je pense quand même que c'est l'index table1(col1) qui aura de meilleurs résultats.
    Dans l'absolu tu as raison, mais il faut voir le "gain" obtenu, ça va être très faible... le seul cas ou le gain serait un peu significatif, c'est si tu faisais un gros select de col1 et que col2 soit une colonne très large... dans ce cas limite, ton index (col1) serait beaucoup plus petit que le (col1,col2) et son parcours complet se ferait en ramenant moins de blocs... dans tous les cas, ça se teste... par contre, ce qui est sur c'est que ça pénélisera les insertions...

    Citation Envoyé par crazykangourou
    J'aimerai bien utiliser la requete la plus pure de plaineR, mais mon parseur perd la boule pour des requetes compliquées et ne reconnait pas les mots clefs exists, il faudrait que je l'améliore.
    D'expérience, c'est beaucoup plus facile à programmer un requêteur avec des EXISTS car tu ajoute des blocs sql de filtrage qui portent en eux meme la bonne jointure et tu n'as pas de risques de doublons... c'est dommage que si peu de concepteurs y pensent...

    Citation Envoyé par crazykangourou
    N'oublie pas, il injecte, compte, fais le café, mais faut pas trop lui en demander
    petit aparté philosophique... (ne le prends par contre toi, c'est général)

    Comme je te l'avais dit, à un moment c'est la quadrature du cercle, tu ne peux pas espérer avoir un comptage instantané de 20000 trucs dans 80000 machins, la base va forcément parcourir les 80000 machins... rajouter à ça un parseur générique sur lequel tu n'as pas la main et tu atteint les limites du possible... le problème est que les bases et les machines étant puissantes, on se permet de concevoir des programmes ou l'on parcours allègrement les grosse tables, ou l'on compte et on re-compte toujours les mêmes choses sans se creuser la tete à prévoir des compteurs de suivi dans l'applicatif lui même. Il y a quelques années, avec des machines moins puissantes, personne n'aurait imaginer sérieusement programmer ce genre de comptage répétitif en interactif. En fait, le gain de puissance est capté par les informaticiens qui économisent du temps de programmation, par contre pour les utilisateurs ça rame toujours autant voir plus!

  10. #30
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut Bonjour à tous comment ca va?
    Remi4444, message bien recu!!!

    Pour vous tenir au courant des évolutions : j'ai fait un index couvrant et supprimé des index sur 1 seule colonne (col1) et bien, je passe de 8 sec pour la requete incriminé à .....
    0,01 sec !!!!!!

    Merci à vous vous avez été de très bons conseils.
    Je pense qu'on aura l'occasion de discuter à nouveau ensembe.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [OL-2010] PST, un ça va, cinq bonjour les dégats
    Par Yepazix dans le forum Outlook
    Réponses: 0
    Dernier message: 12/07/2010, 01h53
  2. [RegEx] un espace ça va deux espaces bonjour les dégats
    Par SpaceFrog dans le forum Langage
    Réponses: 8
    Dernier message: 12/06/2008, 18h43
  3. Réponses: 6
    Dernier message: 21/02/2008, 13h29
  4. 1 instance : oui, 2 instances: bonjour les dégats
    Par od.dev dans le forum Delphi
    Réponses: 11
    Dernier message: 15/12/2006, 18h36
  5. Réponses: 9
    Dernier message: 17/02/2005, 17h41

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