delete sur Grosse table

Le
Ch.
Bonjour,

j'ai une table de 80 millions d'enregistrements
j'ai fais divers traitements dans des tables temporaires pour aller vite et
eviter de locker cette table.

la fin du process doit éliminer 1 million de lignes dans ces 80 Millions
seulement

autant le select va vite

select *
from XXX as X
inner join ZZZ as Z
on z.id = x.id


autan le delete est horriblement long, qu'est ce que j'ai raté ?
delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
OlivierH
Le #19989981
Bonjour,

Dans ton delete il y a une faute deux from

delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id

D'autre part si ton sql est bon est ce que tu as des index sur le id de
Z et X

Olivier,


Ch. a écrit :
Bonjour,

j'ai une table de 80 millions d'enregistrements
j'ai fais divers traitements dans des tables temporaires pour aller
vite et eviter de locker cette table.

la fin du process doit éliminer 1 million de lignes dans ces 80 Millions
seulement

autant le select va vite

select *
from XXX as X
inner join ZZZ as Z
on z.id = x.id


autan le delete est horriblement long, qu'est ce que j'ai raté ?
delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id






Ch.
Le #19991041
Pour info pour faire ce genre de delete sur une jointure
sql server l'ecrit de cette maniere !
essais tu verras.

et oui bien sur qu'il y'a des index c'est bien la premiere chose que j'ai
verifié
c'est meme une cles primaire sur celle que je delete.

pas cool !!!




"OlivierH" news:
Bonjour,

Dans ton delete il y a une faute deux from

delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id

D'autre part si ton sql est bon est ce que tu as des index sur le id de Z
et X

Olivier,


Ch. a écrit :
Bonjour,

j'ai une table de 80 millions d'enregistrements
j'ai fais divers traitements dans des tables temporaires pour aller vite
et eviter de locker cette table.

la fin du process doit éliminer 1 million de lignes dans ces 80 Millions
seulement

autant le select va vite

select *
from XXX as X
inner join ZZZ as Z
on z.id = x.id


autan le delete est horriblement long, qu'est ce que j'ai raté ?
delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id








OlivierH
Le #19991231
Si tu essaies le mode standard SQL
avec un where exist ou in

Delete from Z where Exists(Select * from X where z.id = x.id )
Delete from Z where z.id in (Select x.id from X where z.id = x.id )

Est ce que cela change la rapidité ?

Olivier,

Ch. a écrit :
Pour info pour faire ce genre de delete sur une jointure
sql server l'ecrit de cette maniere !
essais tu verras.

et oui bien sur qu'il y'a des index c'est bien la premiere chose que
j'ai verifié
c'est meme une cles primaire sur celle que je delete.

pas cool !!!




"OlivierH" de news:
Bonjour,

Dans ton delete il y a une faute deux from

delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id

D'autre part si ton sql est bon est ce que tu as des index sur le id
de Z et X

Olivier,


Ch. a écrit :
Bonjour,

j'ai une table de 80 millions d'enregistrements
j'ai fais divers traitements dans des tables temporaires pour aller
vite et eviter de locker cette table.

la fin du process doit éliminer 1 million de lignes dans ces 80
Millions
seulement

autant le select va vite

select *
from XXX as X
inner join ZZZ as Z
on z.id = x.id


autan le delete est horriblement long, qu'est ce que j'ai raté ?
delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id











Ch.
Le #19991341
ben on evite le in ou exist car sur des gros volume c'est pas cool...
mais effectivement c'est à tester

apres avoir changer la methode la derniere sort le tout en 1h30 ce qui es
acceptable sur ce genre.
mais j'aimerais quand meme comprendre pourquoi le delete est souvent
consommateur.
j'ai verifier les index ne sont pas en recalcul automatique des stats.



"OlivierH" news:%
Si tu essaies le mode standard SQL
avec un where exist ou in

Delete from Z where Exists(Select * from X where z.id = x.id )
Delete from Z where z.id in (Select x.id from X where z.id = x.id )

Est ce que cela change la rapidité ?

Olivier,

Ch. a écrit :
Pour info pour faire ce genre de delete sur une jointure
sql server l'ecrit de cette maniere !
essais tu verras.

et oui bien sur qu'il y'a des index c'est bien la premiere chose que j'ai
verifié
c'est meme une cles primaire sur celle que je delete.

pas cool !!!




"OlivierH" news:
Bonjour,

Dans ton delete il y a une faute deux from

delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id

D'autre part si ton sql est bon est ce que tu as des index sur le id de
Z et X

Olivier,


Ch. a écrit :
Bonjour,

j'ai une table de 80 millions d'enregistrements
j'ai fais divers traitements dans des tables temporaires pour aller
vite et eviter de locker cette table.

la fin du process doit éliminer 1 million de lignes dans ces 80
Millions
seulement

autant le select va vite

select *
from XXX as X
inner join ZZZ as Z
on z.id = x.id


autan le delete est horriblement long, qu'est ce que j'ai raté ?
delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id













OlivierH
Le #19991541
Que te dis le plan d'execution sur la consommation de ta requête ?

Olivier,



Ch. a écrit :
ben on evite le in ou exist car sur des gros volume c'est pas cool...
mais effectivement c'est à tester

apres avoir changer la methode la derniere sort le tout en 1h30 ce qui
es acceptable sur ce genre.
mais j'aimerais quand meme comprendre pourquoi le delete est souvent
consommateur.
j'ai verifier les index ne sont pas en recalcul automatique des stats.



"OlivierH" de news:%
Si tu essaies le mode standard SQL
avec un where exist ou in

Delete from Z where Exists(Select * from X where z.id = x.id )
Delete from Z where z.id in (Select x.id from X where z.id = x.id )

Est ce que cela change la rapidité ?

Olivier,

Ch. a écrit :
Pour info pour faire ce genre de delete sur une jointure
sql server l'ecrit de cette maniere !
essais tu verras.

et oui bien sur qu'il y'a des index c'est bien la premiere chose que
j'ai verifié
c'est meme une cles primaire sur celle que je delete.

pas cool !!!




"OlivierH" de news:
Bonjour,

Dans ton delete il y a une faute deux from

delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id

D'autre part si ton sql est bon est ce que tu as des index sur le
id de Z et X

Olivier,


Ch. a écrit :
Bonjour,

j'ai une table de 80 millions d'enregistrements
j'ai fais divers traitements dans des tables temporaires pour
aller vite et eviter de locker cette table.

la fin du process doit éliminer 1 million de lignes dans ces 80
Millions
seulement

autant le select va vite

select *
from XXX as X
inner join ZZZ as Z
on z.id = x.id


autan le delete est horriblement long, qu'est ce que j'ai raté ?
delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id
















OlivierH
Le #19991531
J'oubliais

Est ce que ton plan de maintenance verifie les index toutes les nuits
et est ce que ta table est compacté ?

Olivier,


Ch. a écrit :
ben on evite le in ou exist car sur des gros volume c'est pas cool...
mais effectivement c'est à tester

apres avoir changer la methode la derniere sort le tout en 1h30 ce qui
es acceptable sur ce genre.
mais j'aimerais quand meme comprendre pourquoi le delete est souvent
consommateur.
j'ai verifier les index ne sont pas en recalcul automatique des stats.



"OlivierH" de news:%
Si tu essaies le mode standard SQL
avec un where exist ou in

Delete from Z where Exists(Select * from X where z.id = x.id )
Delete from Z where z.id in (Select x.id from X where z.id = x.id )

Est ce que cela change la rapidité ?

Olivier,

Ch. a écrit :
Pour info pour faire ce genre de delete sur une jointure
sql server l'ecrit de cette maniere !
essais tu verras.

et oui bien sur qu'il y'a des index c'est bien la premiere chose que
j'ai verifié
c'est meme une cles primaire sur celle que je delete.

pas cool !!!




"OlivierH" de news:
Bonjour,

Dans ton delete il y a une faute deux from

delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id

D'autre part si ton sql est bon est ce que tu as des index sur le
id de Z et X

Olivier,


Ch. a écrit :
Bonjour,

j'ai une table de 80 millions d'enregistrements
j'ai fais divers traitements dans des tables temporaires pour
aller vite et eviter de locker cette table.

la fin du process doit éliminer 1 million de lignes dans ces 80
Millions
seulement

autant le select va vite

select *
from XXX as X
inner join ZZZ as Z
on z.id = x.id


autan le delete est horriblement long, qu'est ce que j'ai raté ?
delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id
















Ch.
Le #19991521
c'est une table recontruite a chaque fois index recreer etc...
car c'est pour un travail mensuel.



"OlivierH" news:et$
J'oubliais

Est ce que ton plan de maintenance verifie les index toutes les nuits
et est ce que ta table est compacté ?

Olivier,


Ch. a écrit :
ben on evite le in ou exist car sur des gros volume c'est pas cool...
mais effectivement c'est à tester

apres avoir changer la methode la derniere sort le tout en 1h30 ce qui es
acceptable sur ce genre.
mais j'aimerais quand meme comprendre pourquoi le delete est souvent
consommateur.
j'ai verifier les index ne sont pas en recalcul automatique des stats.



"OlivierH" news:%
Si tu essaies le mode standard SQL
avec un where exist ou in

Delete from Z where Exists(Select * from X where z.id = x.id )
Delete from Z where z.id in (Select x.id from X where z.id = x.id )

Est ce que cela change la rapidité ?

Olivier,

Ch. a écrit :
Pour info pour faire ce genre de delete sur une jointure
sql server l'ecrit de cette maniere !
essais tu verras.

et oui bien sur qu'il y'a des index c'est bien la premiere chose que
j'ai verifié
c'est meme une cles primaire sur celle que je delete.

pas cool !!!




"OlivierH" news:
Bonjour,

Dans ton delete il y a une faute deux from

delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id

D'autre part si ton sql est bon est ce que tu as des index sur le id
de Z et X

Olivier,


Ch. a écrit :
Bonjour,

j'ai une table de 80 millions d'enregistrements
j'ai fais divers traitements dans des tables temporaires pour aller
vite et eviter de locker cette table.

la fin du process doit éliminer 1 million de lignes dans ces 80
Millions
seulement

autant le select va vite

select *
from XXX as X
inner join ZZZ as Z
on z.id = x.id


autan le delete est horriblement long, qu'est ce que j'ai raté ?
delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id


















OlivierH
Le #19991621
Tu peux copier le plan d'execution ?

Pour comprendre d'ou vient les ralentissements ?

Olivier,

Ch. a écrit :
c'est une table recontruite a chaque fois index recreer etc...
car c'est pour un travail mensuel.



"OlivierH" de news:et$
J'oubliais

Est ce que ton plan de maintenance verifie les index toutes les nuits
et est ce que ta table est compacté ?

Olivier,


Ch. a écrit :
ben on evite le in ou exist car sur des gros volume c'est pas cool...
mais effectivement c'est à tester

apres avoir changer la methode la derniere sort le tout en 1h30 ce
qui es acceptable sur ce genre.
mais j'aimerais quand meme comprendre pourquoi le delete est souvent
consommateur.
j'ai verifier les index ne sont pas en recalcul automatique des stats.



"OlivierH" de news:%
Si tu essaies le mode standard SQL
avec un where exist ou in

Delete from Z where Exists(Select * from X where z.id = x.id )
Delete from Z where z.id in (Select x.id from X where z.id = x.id )

Est ce que cela change la rapidité ?

Olivier,

Ch. a écrit :
Pour info pour faire ce genre de delete sur une jointure
sql server l'ecrit de cette maniere !
essais tu verras.

et oui bien sur qu'il y'a des index c'est bien la premiere chose
que j'ai verifié
c'est meme une cles primaire sur celle que je delete.

pas cool !!!




"OlivierH" message de news:
Bonjour,

Dans ton delete il y a une faute deux from

delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id

D'autre part si ton sql est bon est ce que tu as des index sur le
id de Z et X

Olivier,


Ch. a écrit :
Bonjour,

j'ai une table de 80 millions d'enregistrements
j'ai fais divers traitements dans des tables temporaires pour
aller vite et eviter de locker cette table.

la fin du process doit éliminer 1 million de lignes dans ces 80
Millions
seulement

autant le select va vite

select *
from XXX as X
inner join ZZZ as Z
on z.id = x.id


autan le delete est horriblement long, qu'est ce que j'ai raté ?
delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id





















Ch.
Le #19991801
sur le principe oui mais vu que le delete c'est effectué j'ai plus les
valeurs maintenant.
pas cool ça, mais de toute maniere j'aurais le meme cas le mois prochain ;)

"OlivierH" news:
Tu peux copier le plan d'execution ?

Pour comprendre d'ou vient les ralentissements ?

Olivier,

Ch. a écrit :
c'est une table recontruite a chaque fois index recreer etc...
car c'est pour un travail mensuel.



"OlivierH" news:et$
J'oubliais

Est ce que ton plan de maintenance verifie les index toutes les nuits
et est ce que ta table est compacté ?

Olivier,


Ch. a écrit :
ben on evite le in ou exist car sur des gros volume c'est pas cool...
mais effectivement c'est à tester

apres avoir changer la methode la derniere sort le tout en 1h30 ce qui
es acceptable sur ce genre.
mais j'aimerais quand meme comprendre pourquoi le delete est souvent
consommateur.
j'ai verifier les index ne sont pas en recalcul automatique des stats.



"OlivierH" news:%
Si tu essaies le mode standard SQL
avec un where exist ou in

Delete from Z where Exists(Select * from X where z.id = x.id )
Delete from Z where z.id in (Select x.id from X where z.id = x.id )

Est ce que cela change la rapidité ?

Olivier,

Ch. a écrit :
Pour info pour faire ce genre de delete sur une jointure
sql server l'ecrit de cette maniere !
essais tu verras.

et oui bien sur qu'il y'a des index c'est bien la premiere chose que
j'ai verifié
c'est meme une cles primaire sur celle que je delete.

pas cool !!!




"OlivierH" de news:
Bonjour,

Dans ton delete il y a une faute deux from

delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id

D'autre part si ton sql est bon est ce que tu as des index sur le id
de Z et X

Olivier,


Ch. a écrit :
Bonjour,

j'ai une table de 80 millions d'enregistrements
j'ai fais divers traitements dans des tables temporaires pour aller
vite et eviter de locker cette table.

la fin du process doit éliminer 1 million de lignes dans ces 80
Millions
seulement

autant le select va vite

select *
from XXX as X
inner join ZZZ as Z
on z.id = x.id


autan le delete est horriblement long, qu'est ce que j'ai raté ?
delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id























EmanuelL
Le #19991791
Bonjour Ch,

Il me semble que DELETE n'aime pas trop l'alias devant FROM (DELETE
FROM MonAlias), c'est de préciser le nom de la table.

Juste une sugestion :
DELETE ZZZ
FROM ZZZ AS Z
INNER JOIN XXX AS X
IN Z.Id = X.Id

PS: Pas de FROM devant ZZZ pour ce cas particulier.

A+ ;-)

Ch. a émis l'idée suivante :
Bonjour,

j'ai une table de 80 millions d'enregistrements
j'ai fais divers traitements dans des tables temporaires pour aller vite et
eviter de locker cette table.

la fin du process doit éliminer 1 million de lignes dans ces 80 Millions
seulement

autant le select va vite

select *
from XXX as X
inner join ZZZ as Z
on z.id = x.id


autan le delete est horriblement long, qu'est ce que j'ai raté ?
delete from Z
from XXX as X
inner join ZZZ as Z
on z.id = x.id



--

*!* -----------------------------------
EmanuelL
Membre d'AtoutFox
www.atoutfox.org
Publicité
Poster une réponse
Anonyme