Optimisation de requete sous sql server

Bonjour,

j’ai une table ainsi crée sous Sql server 7
tblCUMULS_ELEMENTS
( DATE_VENTE date,
CODE_ELEMENT varchar(13),
CODE_RAYON varchar(10),
FOYER char(10),
NO_CAISSE char(3)
)
Elle possède une PRIMARY KEY CLUSTERED avec ( DATE_VENTE, CODE_ELEMENT, CODE_RAYON, FOYER, NO_CAISSE), + 1 index sur FOYER.

Je souhaite executer cette requete :

UPDATE tblCUMULS_ELEMENTS
SET tblCUMULS_ELEMENTS.FOYER = ‘1234567890’
WHERE tblCUMULS_ELEMENTS.FOYER = ‘9999999999’
AND NOT EXISTS ( SELECT 1
FROM tblCUMULS_ELEMENTS T1
WHERE tblCUMULS_ELEMENTS.DATE_VENTE = T1.DATE_VENTE
AND tblCUMULS_ELEMENTS.CODE_ELEMENT = T1.CODE_ELEMENT
AND tblCUMULS_ELEMENTS.CODE_RAYON = T1.CODE_RAYON
AND tblCUMULS_ELEMENTS.FOYER = ‘1234567890’
AND tblCUMULS_ELEMENTS.NO_CAISSE = T1.NO_CAISSE )

c’est à dire remplacer le foyer ‘9999999999’ par ‘1234567890’ quand les lignes n’existent pas pour le foyer ‘1234567890’.

Cependant, cette table est trés volumineuse ( 35 millions d’enrgt ) et le traitement s’avère assez couteux pour mettre à jour plus de 1000 données ( 30s et plus ).

Je solicite donc votre aide : avez-vous une piste pour accélérer cette requête.

Merci d’avance.

Je travaille avec SQL Server 2000, mais je dirais :

  • degré de parallélisme à 1
  • mettre un with (nolokc) derrière ton FROM

bon courage !

Salut,

Je ne connais pas bien sql server, mais tu ne peux pas jouer avec la contrainte d’intégrité de ton joli PRIMARYKEY?
En d’autres termes faire un truc du genre UPDATE IGNORE qui ferai l’update uniquement si ça ne crée pas de conflit?