Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

delete sur Grosse table

18 réponses
Avatar
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

10 réponses

1 2
Avatar
OlivierH
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






Avatar
Ch.
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" <"nospam[contact]"@planitron.com> a écrit dans le 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








Avatar
OlivierH
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" <"nospam[contact]"@planitron.com> a écrit dans le 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











Avatar
Ch.
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" <"nospam[contact]"@planitron.com> a écrit dans le message 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" <"nospam[contact]"@planitron.com> a écrit dans le 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













Avatar
OlivierH
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" <"nospam[contact]"@planitron.com> a écrit dans le message
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" <"nospam[contact]"@planitron.com> a écrit dans le 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
















Avatar
OlivierH
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" <"nospam[contact]"@planitron.com> a écrit dans le message
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" <"nospam[contact]"@planitron.com> a écrit dans le 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
















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



"OlivierH" <"nospam[contact]"@planitron.com> a écrit dans le message 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" <"nospam[contact]"@planitron.com> a écrit dans le message 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" <"nospam[contact]"@planitron.com> a écrit dans le 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


















Avatar
OlivierH
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" <"nospam[contact]"@planitron.com> a écrit dans le message
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" <"nospam[contact]"@planitron.com> a écrit dans le message
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" <"nospam[contact]"@planitron.com> a écrit dans le
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





















Avatar
Ch.
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" <"nospam[contact]"@planitron.com> a écrit dans le message de
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" <"nospam[contact]"@planitron.com> a écrit dans le message 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" <"nospam[contact]"@planitron.com> a écrit dans le message 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" <"nospam[contact]"@planitron.com> a écrit dans le 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























Avatar
EmanuelL
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
1 2