Bonjour,

Je suis sur SQL SERVER 2000 et j'ai développé une Procédure stocké en T-SQL. Lorsque j'exécute les instruction séparément dans Query analyzer, ils s'éxécutent en 1h24.

Dans cette procédure stocké au sein d'un job, il lui faut 2h24 certaine fois et 1h30 d'autre fois pour s'executer.

Pourriez-vous critiquer mon code pour que je puisse l'améliorer si nécessaire ?

Merci à vous !

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
------------------------------------------------------------------------------------------------------------
--  TITRE :  		PB_01_MAJ_USER_DATA
------------------------------------------------------------------------------------------------------------
--  DT CREATION :	19 MAI 2008
--  AUTEUR :		HODAWA
--  OBJECTIF : 		Mise à jour des données utilisateur en cas 
--			d'échec de l'importation des données de 
--			TERADATA
------------------------------------------------------------------------------------------------------------
 
CREATE PROCEDURE PB_01_MAJ_USER_DATA AS 
 
DECLARE
 
	@Nb_Row int
 
	BEGIN
 
		-- Etape 00 : Déconnexion des USERs
		UPDATE TABLE1 set C1= 'V'
 
		INSERT INTO TABLE1 ( C1, C2, C3) 
		SELECT 1, getdate(), 1 
 
		-- Etape 01 : Suppression de la table TABLE2
		TRUNCATE TABLE TABLE2
 
		-- Etape 02 : Suppression des Indexes de la table TABLE2
		IF EXISTS (SELECT name FROM sysindexes WHERE name = 'TABLE2_IDX1')
		   DROP INDEX TABLE2.TABLE2_IDX1
		IF EXISTS (SELECT name FROM sysindexes WHERE name = 'TABLE2_IDX2')
		   DROP INDEX TABLE2.TABLE2_IDX2
		IF EXISTS (SELECT name FROM sysindexes WHERE name = 'TABLE2_IDX3')
		   DROP INDEX TABLE2.TABLE2_IDX3
		IF EXISTS (SELECT name FROM sysindexes WHERE name = 'TABLE2_IDX4')
		   DROP INDEX TABLE2.TABLE2_IDX4
 
		-- Etape 03 : Insertion des datas dans la table de travail (environ 13 min pour 3 600 000 lignes)
		INSERT INTO [DATABASE1].[dbo].[TABLE2]([C1],..., [Cn])
		SELECT [C1], ..., [Cn]
		FROM [DATABASE1].[dbo].[TABLE3]
 
		-- Etape 04 : Reconstruction des Indexes de la table TABLE2
		CREATE INDEX TABLE2_IDX1 ON TABLE2(C2, C3, C4) ON [INDEX_ATE_LARGE_F001]
		CREATE INDEX TABLE2_IDX2 ON TABLE2(C5) ON [INDEX_ATE_LARGE_F001]
		CREATE INDEX TABLE2_IDX3 ON TABLE2(C6) ON [INDEX_ATE_LARGE_F001]
		CREATE INDEX TABLE2_IDX4 ON TABLE2(C7) ON [INDEX_ATE_LARGE_F001]
 
		--Etape 05 :  Chargement de la variable @row avec le nombre d'enregistrement chargés dans TABLE2
		SELECT	         @Nb_Row =  count(*) 
		FROM		TABLE2
 
		-- Etape 06 : Mise à jour de la table TABLE1 avec le nombre d'enregistrement chargés dans TABLE2 et 
		-- l'indicateur de chargement en cours à  0 (C2).
		UPDATE	       TABLE1
		SET		nbenr = @Nb_Row , C2=0
		WHERE	       C1= '1'
 
		-- Etape 07 : Suppression des datas dans la table de travail
		-- cette étape doit ce faire seulement si les lignes sont insérées dans ACLTOL
		TRUNCATE TABLE	TABLE3
 
	END
GO