Bonjour,
j'ai une base de données "PRINCIPALE" qui est remplie à partir d'autre bases "SECONDAIRES".
En gros chaque bases SECONDAIRE est liées à la PRINCIPALE et insère une ligne à chaque nouvelle enregistrement.
Mon problème est que les bases externe ne sont pas toutes de ma création et je me retrouve avec des types d'identifiants différents (bigint et uniqueidentifier...)
C'est pourquoi j'ai pensé, a creer un champ de type XML pour retrouver mes données qui contiendra les valeurs nécessaires.
Pour le fonctionnement coté applicatif, tout se passe à merveille !! Je récupère un XML que j'analyse dans le code et je récupère mes données pour interroger les bases SECONDAIRES.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Exemple: <Reference> <id type="long">4546</id> <!-- Id externe de type long --> </Reference> <Reference> <id type="guid">4456-4565.....</id> <!-- Id externe de type GUID --> <PartitionDate type="datetime">03/05/2005</PartitionDate> <!-- Id de la partition --> </reference>
Mon problème est que les serveurs SECONDAIRES vont effectuer des mises à jour des données sur le serveur PRINCIPALE en se basant sur leur Id ( contenu dans le XML)
j'ai donc une requête de ce type :
Mon problème est que c'est long, j'ai un résultat en 25 secondes ( ma table fait 2 millions de ligne pour le moment) ce qui est beaucoup trop long, j'ai essayer d'optimiser à mort en mettant en oeuvre ce que j'ai vu dans pas mal de tuto (index principal xml, index secondaire ...).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 UPDATE INDEX SET IDX_type = XXX WHERE Id = ( SELECT I.Id FROM INDEX I CROSS APPLY idx_xml.nodes(N'/reference[1]') T(C) WHERE C.Value(N'(//id)[1]',N'bigint') = XXXXX)
Avant je n'avais que des systèmes avec des id de type long et j'avais donc un champ IdExterne(long), mes updates était instantanée et la en XML je perd trop de temps.
Je ne veux pas faire des champs tout crade avec idExterneLong, IdExterneGUID, PartitionDate... et un champ sur deux de rempli ce n'est pas propre je trouve.
Ai-je un moyen d'optimiser mon XML ??
Voyez vous une meilleur solution ??
Merci d'avance, j'espère avoir été clair.
PS : désolé pour la longue tirade.
Partager