Microsoft SQL Server
Almacenamiento de JSON en tablas SQL
Buscar..
JSON almacenado como columna de texto
JSON es un formato de texto, por lo que se almacena en columnas NVARCHAR estándar. La colección NoSQL es equivalente a dos tablas de valores de clave de columna:
CREATE TABLE ProductCollection (
Id int identity primary key,
Data nvarchar(max)
)
Use nvarchar(max)
ya que no está seguro de cuál sería el tamaño de sus documentos JSON. nvarchar(4000)
y varchar(8000)
tienen un mejor rendimiento pero con un límite de tamaño de 8 KB.
Asegúrese de que JSON esté formateado correctamente utilizando ISJSON
Dado que JSON se almacena en la columna de texto, es posible que desee asegurarse de que está formateado correctamente. Puede agregar la restricción CHECK en la columna JSON que verifica si JSON tiene el formato correcto de texto:
CREATE TABLE ProductCollection (
Id int identity primary key,
Data nvarchar(max)
CONSTRAINT [Data should be formatted as JSON]
CHECK (ISJSON(Data) > 0)
)
Si ya tiene una tabla, puede agregar una restricción de verificación mediante la instrucción ALTER TABLE:
ALTER TABLE ProductCollection
ADD CONSTRAINT [Data should be formatted as JSON]
CHECK (ISJSON(Data) > 0)
Exponer valores de texto JSON como columnas calculadas
Puede exponer los valores de la columna JSON como columnas calculadas:
CREATE TABLE ProductCollection (
Id int identity primary key,
Data nvarchar(max),
Price AS JSON_VALUE(Data, '$.Price'),
Color JSON_VALUE(Data, '$.Color') PERSISTED
)
Si agrega la columna calculada PERSISTADA, el valor del texto JSON se materializará en esta columna. De esta manera, sus consultas pueden leer más rápidamente el valor del texto JSON porque no se necesita un análisis. Cada vez que JSON en esta fila cambia, el valor se volverá a calcular.
Agregando índice en la ruta JSON
Las consultas que filtran u ordenan los datos por algún valor en la columna JSON usualmente usan el escaneo completo de la tabla.
SELECT * FROM ProductCollection
WHERE JSON_VALUE(Data, '$.Color') = 'Black'
Para optimizar este tipo de consultas, puede agregar una columna calculada no persistente que exponga la expresión JSON utilizada en el filtro u ordenación (en este ejemplo, JSON_VALUE (Datos, '$ .Color')), y crear un índice en esta columna:
ALTER TABLE ProductCollection
ADD vColor as JSON_VALUE(Data, '$.Color')
CREATE INDEX idx_JsonColor
ON ProductCollection(vColor)
Las consultas utilizarán el índice en lugar de la exploración de tabla simple.
JSON almacenado en tablas en memoria
Si puede usar tablas optimizadas en memoria, puede almacenar JSON como texto:
CREATE TABLE ProductCollection (
Id int identity primary key nonclustered,
Data nvarchar(max)
) WITH (MEMORY_OPTIMIZED=ON)
Ventajas de JSON en memoria:
- Los datos JSON están siempre en la memoria, por lo que no hay acceso al disco
- No hay bloqueos ni pestillos mientras se trabaja con JSON