2010-05-21 23 views
24

Tengo una base de datos que mantendrá las entradas de registro.¿Cuál es la penalización del rendimiento del tipo de datos XML en SQL Server en comparación con NVARCHAR (MAX)?

Una de las columnas en la tabla de registro contiene objetos serializados (a XML) y un miembro de mi equipo propuso ir con el tipo de datos XML en lugar de NVARCHAR (MAX). Esta tabla tendrá los registros mantenidos "para siempre" (el archivado de algunas entradas muy antiguas puede considerarse en el futuro).

Estoy un poco preocupado por la sobrecarga de la CPU, pero estoy aún más preocupado de que la base de datos pueda crecer más rápido (FoxyBOA de la pregunta referida obtuvo un DB un 70% mayor al usar XML).

He leído esto question y me ha dado algunas ideas, pero estoy particularmente interesado en aclarar si el tamaño de la base de datos aumenta o disminuye.

Puede compartir sus conocimientos/experiencias en ese asunto.

BTW. Actualmente no tengo ninguna necesidad de depender de las características XML dentro de SQL Server (para el caso específico, tengo casi cero ventajas). Ocasionalmente se extraerán las entradas de registro, pero prefiero manejar el XML usando .NET (escribiendo un pequeño cliente o usando una función definida en un ensamblado .NET).

Respuesta

32

Si tiene XML, y puede estar seguro de que siempre es XML, definitivamente recomendaría ir de esa manera. SQL Server almacena XML en un formato optimizado; ni siquiera necesita ningún índice XML para beneficiarse de él.

Si inserta 5000 filas de un XML de 5KB en una columna XML, obtendrá aproximadamente 1250 páginas = 9 MB. Al insertar las mismas 5000 filas con el mismo XML de 5KB en NVARCHAR (MAX) se usan más de 3700 páginas o 29 MB, ¡una gran diferencia!

Y esa diferencia debería ser aún más pronunciada si puede asociar su XML con un esquema XML almacenado en SQL Server. Además, también tiene la garantía de que el XML almacenado se ajusta a un esquema; a veces puede ser muy útil. No se puede hacer eso con una simple columna NVARCHAR (MAX) ...

Y no estoy de acuerdo con que el uso de XML sobre NVARCHAR (MAX) tenga una penalización de rendimiento, sino todo lo contrario. Como potencialmente está recuperando menos datos de SQL Server cuando está a punto de mostrar o recuperar el contenido, yo diría que es incluso un poco más rápido que NVARCHAR (MAX).

+1

Pero esto es para las entradas de registro, por lo que presumiblemente Lo que quiere escribir sin la sobrecarga de indexación (que podría ser importante si el objeto serializado es grande) aunque se hizo el leer mucho más lento? – MusiGenesis

+0

Sí, claro, siempre y cuando solo tenga que mostrar el XML completo (cuando necesite mirar una entrada de registro), los índices XML realmente no ayudan mucho, ¡pero de seguro le costará! –

Cuestiones relacionadas