|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : janvier 2006 Messages : 7 ![]() |
Bonjour,
J'ai une proc.stockée qui traite une table sur laquelle je souhaite supprimer des enregistrements si ils existent. Les index sont OK. J'ai donc tenté un : Code :
DELETE FROM tb WHERE Champ1=X AND Champ2=Y Code :
SELECT COUNT(*) FROM tb WHERE Champ1=X AND Champ2=Y Dans ce cas là, le DELETE prend 3 fois plus de temps à s'executer que de tester si les lignes existent dans un IF. Autrement dit, dans le cas ou des lignes existent, il sera plus rapide de faire un DELETE FROM direct . Dans le cas où les lignes n'existent pas, il sera plus rapide de faire un IF pour tester si les lignes existent, et comme ce n'est pas le cas, le temps passé sera juste celui du SELECT. Voyez-vous une explication technique ? Et que me conseillez-vous sachant que les 2 cas ont environ autant de chances de se produire (lignes déjà présentes / lignes absentes). Merci pour vos avis |
|
|
00
|
|
|
#2 |
|
Membre à l'essai
![]() Inscription : février 2006 Messages : 28 ![]() |
Hello,
Cela me parait tout a fait normale que le DELETE sois plus long étant donné que tu supprimes des valeurs (suppression dans la table + mise à jour de l'index) Donc je pense que le meilleur compromis reste: IF EXISTS (SELECT COUNT(1) FROM tb WHERE Champ1=X AND Champ2=Y) DELETE FROM tb WHERE Champ1=X AND Champ2=Y go |
|
|
00
|
|
|
#3 |
|
Membre à l'essai
![]() Inscription : février 2006 Messages : 28 ![]() |
Tu peux aussi t'aider de la commande:
set showplan on -- Affiche le plan d'exécution de la requête set showplan , noexec on -- n'exécute pas la requête |
|
|
00
|
|
|
#4 |
|
Membre du Club
![]() Inscription : octobre 2005 Messages : 79 ![]() |
Vous pouvez en plus du plan d'exécution regarder la consommation en i/o.
Avec l'option : set statistic io on -- Requêtes set statistic io off go Le but étant de réduire également la consommation en io. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com