Avatar billede Lasse Novice
15. maj 2008 - 17:32 Der er 4 kommentarer og
1 løsning

Hvorfor er xml behandling saa langsom

Hej

Jeg har en SP der tager et xml dokument som parametre og indsaetter dette i min db.

Et uddrag af mit XML:

<chef id="1">
<medarbejder id="2" />
</chef>

Jeg har en "ChefMedarbejder" tabel der har foelgende kolonner:

chefid, medarbejderid

Efter indsaettelse skal det gerne se saaledes ud:

chefid, medarbejderid
1, 2


Jeg bruger foelgende sql saetning til dette:


INSERT
INTO    ChefMedarbejder
SELECT    nref.value('../@Code', 'varchar(30)'), -- denne linie goer at det tager 50 gange laengere tid
    nref.value('@Id', 'varchar(30)')
FROM    @Xml.nodes('chef/medarbejder') AS R(nref)

Problemet er at linien hvori jeg skriver:

-- denne linie goer at det tager 50 gange laengere tid

goer at det hele tager lang tid. Er der nogen anden maade at goere dette paa (stadig ved brug af XML), saaledes at det ikke tager lang tid, evt loebe noderne igennem paa en anden maade?
Avatar billede janus_007 Nybegynder
19. maj 2008 - 21:21 #1
Hvilken SQL -version bruger du?
Avatar billede Lasse Novice
20. maj 2008 - 00:16 #2
sql server 2005
Avatar billede Lasse Novice
20. maj 2008 - 00:17 #3
Laeg maerke til at den tager vaerdien for en parent node.
Avatar billede Lasse Novice
20. maj 2008 - 23:37 #4
Dette kode goer det 50-60 gange hurtigere:


DECLARE @TempXml AS XML

SELECT    @TempXml = @ExpertsysReport.query(
        'for $c in /chef
        for $d in $c/medarbejder
        return
        <Temp Code="{$c/@Code}" Id="{$d/@Id}" ></Temp>')

INSERT
INTO    ChefMedarbejder
SELECT    nref.value('@Code', 'varchar(30)'),
    nref.value('@Id', 'varchar(30)')
FROM    @TempXml.nodes('Temp') AS R(nref)


Det eneste der kunne vaere fedt nu er at undgaa temp XML dokumentet...
Avatar billede Lasse Novice
11. august 2010 - 16:55 #5
Brug af tmp tabeller goer koden ekstremt meget hurtigere...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester