2010-05-21 12 views
24

Ho un database che manterrà le voci del registro.Qual è la penalità delle prestazioni del tipo di dati XML in SQL Server rispetto a NVARCHAR (MAX)?

Una delle colonne nella tabella del registro contiene oggetti serializzati (in XML) e un ragazzo del mio team ha proposto di utilizzare il tipo di dati XML anziché NVARCHAR (MAX). Questa tabella avrà i log mantenuti "per sempre" (l'archiviazione di alcune voci molto vecchie potrebbe essere presa in considerazione in futuro).

Sono un po 'preoccupato per il sovraccarico della CPU, ma sono ancora più preoccupato che DB possa crescere più velocemente (FoxyBOA dalla domanda di riferimento ha ottenuto il 70% di DB più grande quando si utilizza XML).

Ho letto questo question e mi ha dato alcune idee, ma sono particolarmente interessato a chiarire se le dimensioni del database aumentano o diminuiscono.

Potete per favore condividere le vostre intuizioni/esperienze in questa materia.

BTW. Al momento non ho alcun bisogno di dipendere dalle funzionalità XML di SQL Server (ci sono quasi zero vantaggi per me nel caso specifico). Verranno estratte le voci di log occasionalmente, ma preferisco gestire XML usando .NET (scrivendo un piccolo client o utilizzando una funzione definita in un assembly .NET).

risposta

32

Se si dispone di XML, e si può essere sicuri che sia sempre XML, consiglio vivamente di andare in quel modo. SQL Server memorizza XML in un formato ottimizzato: non è necessario alcun indice XML per trarne vantaggio.

Se si inseriscono 5000 righe di un XML da 5 KB in una colonna XML, si ottengono circa 1250 pagine = 9 MB. Inserire le stesse 5000 righe con lo stesso XML da 5KB in NVARCHAR (MAX) usa oltre 3700 pagine o 29 MB - una bella differenza!

E questa differenza dovrebbe essere ancora più pronunciata se è possibile associare il codice XML a uno schema XML memorizzato in SQL Server. Inoltre, è anche garantito che l'XML memorizzato sia conforme a uno schema - può essere molto utile a volte! Impossibile farlo con una semplice colonna NVARCHAR (MAX) ...

E non sono d'accordo che l'uso di XML su NVARCHAR (MAX) abbia qualche penalizzazione delle prestazioni, al contrario. Dal momento che potenzialmente stai recuperando meno dati da SQL Server quando stai per visualizzare o recuperare il contenuto, direi che è persino un po 'più veloce di NVARCHAR (MAX).

+1

Ma questo è per le voci di registro, quindi presumibilmente che ci si vuole scrivere senza il sovraccarico di indicizzazione (che potrebbe essere sostanziale se l'oggetto serializzato è di grandi dimensioni), anche se ha fatto la lettura molto più lento? – MusiGenesis

+0

Sì, certo: basta che mostri l'intero XML (quando hai bisogno di guardare una voce di registrazione), quindi gli indici XML non sono di grande aiuto, ma sicuramente costano un sovraccarico! –

Problemi correlati