Ricerca…


JSON memorizzato come colonna di testo

JSON è il formato testuale, quindi è archiviato nelle colonne standard di NVARCHAR. La raccolta NoSQL è equivalente alla tabella dei valori delle chiavi a due colonne:

CREATE TABLE ProductCollection (
  Id int identity primary key,
  Data nvarchar(max)
)

Usa nvarchar(max) poiché non sei sicuro di quale sarebbe la dimensione dei tuoi documenti JSON. nvarchar(4000) e varchar(8000) hanno prestazioni migliori ma con limiti di dimensione a 8 KB.

Assicurati che JSON sia formattato correttamente usando ISJSON

Poiché JSON è una colonna di testo memorizzata, è possibile assicurarsi che sia formattata correttamente. Puoi aggiungere il vincolo CHECK sulla colonna JSON che controlla il testo JSON correttamente formattato:

CREATE TABLE ProductCollection (
  Id int identity primary key,
  Data nvarchar(max)
       CONSTRAINT [Data should be formatted as JSON]
       CHECK (ISJSON(Data) > 0)
)

Se hai già una tabella, puoi aggiungere il vincolo di controllo usando l'istruzione ALTER TABLE:

ALTER TABLE ProductCollection
    ADD CONSTRAINT [Data should be formatted as JSON]
        CHECK (ISJSON(Data) > 0)

Esporre valori dal testo JSON come colonne calcolate

Puoi esporre i valori dalla colonna JSON come colonne calcolate:

CREATE TABLE ProductCollection (
  Id int identity primary key,
  Data nvarchar(max),
  Price AS JSON_VALUE(Data, '$.Price'),
  Color JSON_VALUE(Data, '$.Color') PERSISTED
)

Se aggiungi la colonna calcolata PERSISTED, il valore del testo JSON verrà materializzato in questa colonna. In questo modo le tue query possono leggere più velocemente il valore dal testo JSON perché non è necessaria alcuna analisi. Ogni volta che viene modificato il JSON in questa riga, il valore verrà ricalcolato.

Aggiunta dell'indice sul percorso JSON

Le query che filtrano o ordinano i dati per un certo valore nella colonna JSON di solito utilizzano la scansione completa della tabella.

SELECT * FROM ProductCollection
WHERE JSON_VALUE(Data, '$.Color') = 'Black'

Per ottimizzare questo tipo di query, è possibile aggiungere una colonna calcolata non persistente che espone l'espressione JSON utilizzata nel filtro o nell'ordinamento (in questo esempio JSON_VALUE (Dati, '$ .Color')) e creare l'indice su questa colonna:

ALTER TABLE ProductCollection
ADD vColor as JSON_VALUE(Data, '$.Color')

CREATE INDEX idx_JsonColor
ON ProductCollection(vColor)

Le query utilizzeranno l'indice invece della scansione semplice della tabella.

JSON memorizzato nelle tabelle in memoria

Se è possibile utilizzare tabelle ottimizzate per la memoria, è possibile memorizzare JSON come testo:

CREATE TABLE ProductCollection (
  Id int identity primary key nonclustered,
  Data nvarchar(max)
) WITH (MEMORY_OPTIMIZED=ON)

Vantaggi di JSON in memoria:

  • I dati JSON sono sempre in memoria, quindi non c'è accesso al disco
  • Non ci sono blocchi e latch mentre si lavora con JSON


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow