Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/09/2008, 12h15   #1
Membre confirmé
 
Inscription : avril 2008
Messages : 233
Détails du profil
Informations personnelles :
Âge : 36

Informations forums :
Inscription : avril 2008
Messages : 233
Points : 216
Points : 216
Par défaut Optimisation d'une mise à jour

Bonjour !

J'ai deux tables avec beaucoup d'enregistrements dans chacune (dizaines de millions), je veux faire un mise à jour d'un champs de la table1 avec de l'information de la table2. J'écris une proc sql :
Code :
1
2
3
4
5
6
7
8
9
proc sql;
	UPDATE table1 a
	SET COMPTA_BILAN = (
		SELECT COMPTA
		FROM table2 b
		WHERE a.NO_SINISTRE = b.NO_SINISTRE AND input(a.EVA_COD, 2.) = b.COD_EVA)
	WHERE EX_COMPTA = 2007
;
quit;
Déjà la première question : est-ce que c'est une bonne façon de travailler ? Vous feriez comment ?

Moi, je créé des indexes : EX_COMPTA sur la table2 (pour que SAS trouve vite les lignes à mettre à jour) et NO_SINISTRE/COD_EVA sur la table 2 (pour que SAS trouve vite la ligne correspondante à chaque ligne à mettre à jour).

Dans mon log par contre j'ai plein de messages ("plein" = un message par ligne !) de style :
Code :
1
2
INFO : INDEX no_sinistre sélectionné pour optimisation de la clause WHERE.
INFO : Utilisation de l'index no_sinistre pour optimisation de la clause WHERE annulée.
Pourquoi il n'utilise pas l'index ? Any idea ?
green_fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h44.


 
 
 
 
Partenaires

Hébergement Web