|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||||
|
Membre actif
![]() Inscription : mai 2004 Messages : 725 ![]() |
Bonjour,
J'aimerais pouvoir supprimer la ligne rec (le premier résultat de la boucle) J'aimerais faire un delete de rec si rec a des champs egaux avec rec2. Voir le code ci dessous : Code :
Code :
Voici l'algorithme que je tente de reproduire : Citation:
Merci |
|||||
|
|
00
|
|
|
#2 | |||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Bizarre modèle, déjà il y a des doublons mais je ne comprends pas bien la logique derrière
Citation:
Code :
|
|||
|
|
00
|
|
|
#3 |
|
Membre actif
![]() Inscription : mai 2004 Messages : 725 ![]() |
Ca marche ta fonction sur une table avec peu d'éléments.
Par contre la requete prend trop de temps sur une base de 138 000 elements. Il me faut trouver une requete plus rapide. |
|
|
00
|
|
|
#4 | |
|
Membre actif
![]() Inscription : mai 2004 Messages : 725 ![]() |
Bonjour,
Comment supprimer les doublons de ma table ? Je vais appliquer les conditions de l'algo suivant pour supprimer les doublons de cette table : Citation:
Voir la requete sql que j'ai trouvé : http://www.developpez.net/forums/d10...-element-loop/ Malheureusement la requete SQL du lien precedent dure assez longtemps.+ de 10 minutes !!! J'aimerais trouver une requete SQL qui supprime les doublons tres vite. La table n'a pas de clé primaire. La clé primaire est formé avec 3 champs comme vous pouvez le voir sur l'algo d'en haut. Merci, Merci |
|
|
|
00
|
|
|
#5 |
![]() ![]() |
Il faudrait fournir plus d'éléments pour vous aider sur la performance, pour commencer :
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#6 |
|
Membre actif
![]() Inscription : mai 2004 Messages : 725 ![]() |
Salut,
la volumétrie en nombre de lignes et en octets ->Il y a 180 000 lignes sur cette table. la liste des index de votre table -> Il y en a 1 seul index qui comprend la colonne NIP,ID_DEMANDE,TYPE_EXAMEN le plan d'exécution de la requête de suppression -> que voulez vous dire par la ? |
|
|
00
|
|
|
#7 | ||
![]() ![]() |
En fait ça va être plutôt simple, vous n'allez pas faire de DELETE du tout !
Supprimer 150.000 lignes sur 180.000, ce n'est pas intéressant, dans ces cas-là il vaut mieux recréer une nouvelle table avec les 30.000 données correctes : Code :
Ce sera beaucoup plus rapide.
__________________
Email : http://scr.im/waldar |
||
|
00
|
|
|
#8 |
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Salut !
Le plan d'exécution, c'est ce qui permet de savoir comment Oracle exécute ta requête ... et donc ce qui peut permettre de comprendre pourquoi ça rame ... et donc éventuellement de trouver une solution. Tu exécutes dans SQL*Plus (par exemple) : Tu lances ensuite : Code :
SELECT * FROM TABLE(dbms_xplan.display) Peut être poser un index sur (DATE_PRESCRIPTION,TYPE_EXAMEN,ID_DEMANDE) ?
__________________
(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
|
|
|
#9 | ||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Evidemment la proposition de Waldar est très bonne vue le pourcentage de lignes concerné, cependant cette soultion a un problème : il faut connaître le script des droits à réattribuer.
Alors il est peut être possible de retrouver les droits en question via un export de table avec rows=n puis réimport dans un autre schema en précisant le paramêtre log. Mais pour savoir si ce mode de récupération des grants est total et pérenne il faudrait l'avis d'un dba. Il y a peut être d'autres moyens mais pareil un dba sera le bien venu pour préciser. Compte tenu de la volumétrie loin d'être excessive il me semble envisageable de quand même supprimer les lignes. Mais il est important pour de bonne perf avec le DELETE proposé de passer par un index à cause de la requête corrélée liée à EXISTS. Dans un 1er temps suit les conseils de Pacmann sinon essaie en modifiant l'ordre des colonnes dans l'index. Ou alors une version peut être plus fullscan friendly pour du 10g+ pourrait être : Code :
|
||
|
|
00
|
|
|
#10 | ||
|
Membre actif
![]() Inscription : mai 2004 Messages : 725 ![]() |
Merci pour vos réponses.
Voici la solution que j'ai adopté. J'ai trouvé une clé primaire temporaire rowid. J'ai supprimé les éléments à partir de rowid. Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com