|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Inscription : décembre 2010 Messages : 190 ![]() |
Bonjour à tous,
J'ai une requête update sur une table et elle rame quand je l'exécute, donc je souhaiterais faire intervenir les index. Code :
Je souligne que la table1 comporte plus de 2 millions de lignes contre 2000 pour la table 2. |
||
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Déjà faire
Code :
|
||
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : décembre 2010 Messages : 190 ![]() |
Ok je vais le faire.
Et merge me sort cette erreur : Code :
ORA-30926 : impossible d'obtenir un ensemble de lignes stables dans les tables source |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
Vous n'avez aucun index de défini ?
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
00
|
|
|
#5 | ||
|
Membre du Club
![]() Inscription : décembre 2010 Messages : 190 ![]() |
si j'ai mis un index sur : Status et sur nvl(tab1.col6,0).
Voici ma requête avec le merge : Code :
|
||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
Je pense qu'un index sur tab1.col3 , tab2.col3 ou tab1.col4 , tab2.col4 (en fonction de la colonne la plus discriminante) peut etre envisagé.
J'ai des doute quand a l'index sur tab1.col6
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
|
|
|
00
|
|
|
#8 |
|
Membre du Club
![]() Inscription : décembre 2010 Messages : 190 ![]() |
Une petite question:
Est ce que le 'MERGE' apporte plus de performance à la requête? Et comme disposer les index dans une telle requête? Merci bcp.
|
|
|
00
|
|
|
#9 | ||
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
A l’origine vous avez une requête de type
Code :
Ce problème peut être résolu avec Merge. Normalement les colonnes de jointures sont la clé de la table t1 et normalement un index existe sur ces colonnes. Dans votre cas les valeurs New et le Nvl indiquent plutôt une faible sélectivité et les indexer ne semble pas à servir à grand chose. |
||
|
|
10
|
|
|
#10 | |
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Salut !
Citation:
La question restant... est ce que col6 est très sélective ?
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
|
|
00
|
|
|
#11 |
|
Membre du Club
![]() Inscription : décembre 2010 Messages : 190 ![]() |
non la colonne n'est pas très sélective...
|
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Dans ce cas, je te renvoie à la remarque de Yanika : il faut envisager de "partir" de la table tab2 qui a moins de lignes, afin d'éviter le scan des 50 millions de lignes.
Par contre, comme ton lien sur les colonnes de la table1 utilise des fonctions, il faut envisager de créer un index sur les fonctions correspondantes : - trim(rtrim(substr(tab1.LIGNE_ME,153,4))) - ltrim(rtrim(substr(tab1.LIGNE_ME,157,4))) Avec la même question : ces valeurs sont elles sélectives ? A surveiller également si ces colonnes sont nullables...
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
|
00
|
|
|
#13 |
|
Membre du Club
![]() Inscription : décembre 2010 Messages : 190 ![]() |
Comment je peux partir de la première table alors qu'elle est la principale?
|
|
|
00
|
|
|
#14 | ||||
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
En fait, pour savoir ce qu'il faut mettre à jour, on commence par faire la jointure... donc on peut sans aucun doute commencer par la petite table.
Un exemple : je crée une grosse table qu'il faut mettre à jour, avec les valeurs d'une petite table : Code :
Code :
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
||||
|
00
|
|
|
#15 |
|
Membre du Club
![]() Inscription : décembre 2010 Messages : 190 ![]() |
Merci bcp pour ces informations.
Je vais analyser ma requête et revenir vers vous.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com