Typologie :
- Procédures stockées
- SQL Server 2000
Bonjour à tous et tout d'abord bravo pour vos posts éclairés.
Pour mon premier post, j'ai décidé de placer la barre haut (en fait je n'ai pas vraiment le choix)
Voici mon problème :
Pour chaque entrée d'une table pouvant contenir jusqu'à 200 000
entrées je dois insérer plusieurs enregistrements dans une autre table (avec des valeurs calculées à partir des données de la première table).
Pour ce faire je parcours la première table à l'aide d'un curseur LOCAL READ_ONLY et j'appelle des fonctions stockées faites maison pour calculer
les valeurs (4 en tout, basées sur des grosses jointures) que j'insère
dans la nouvelle table.
J'ai alors obtenu des résultats plus ou moins attendus :
- Mon script se traine (estimation à 12h de batch) surtout en raison des
calculs pré-INSERT à partir des valeurs lues dans la table source.
J'ai donc testé mon code et en ai tiré les conclusions suivantes :
- les jointure dans le FROM (tab1 JOIN tab2 ON ...) sont plus lourdes que les simples jointure dans le WHERE (WHERE id1 = id2) !.
Constaté sur des requêtes lourdes avec jointure d'au moins 4 tables bien garnies (environ 250 000 enregistrements).
Mes questions :
- J'entend dire partout que les CURSOR sont contre productifs, mais dans mon cas comment le remplacer ?
- L'appel de 4 fonctions par enregistrement fait-il perdre du temps ?
Devrais-je insérer directement le code de ces fonctions dans une seule grosse procédure (ou bien c'est déjà géré inline)?
Voila, merci d'avance, je vous fait suivre toute autre information que je peu vous communiquer![]()
Partager