Sök…


JSON lagras som textkolumn

JSON är textformat, så det lagras i standard NVARCHAR-kolumner. NoSQL-samling motsvarar två kolumnens nyckeltal:

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

Använd nvarchar(max) eftersom du inte är säker på vad som skulle vara storleken på dina JSON-dokument. nvarchar(4000) och varchar(8000) har bättre prestanda men med storleksgräns till 8KB.

Se till att JSON är korrekt formaterad med ISJSON

Eftersom JSON är lagrad textkolumn, kanske du vill se till att den är korrekt formaterad. Du kan lägga till CHECK-begränsning i JSON-kolumnen som kontrollerar att texten är korrekt formaterad JSON:

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

Om du redan har en tabell kan du lägga till kontrollbegränsningar med ALTER TABLE-uttalandet:

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

Exponera värden från JSON-text som beräknade kolumner

Du kan exponera värden från JSON-kolumnen som beräknade kolumner:

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

Om du lägger till PERSISTED beräknad kolumn kommer materialet från JSON-text att materialiseras i den här kolumnen. På så sätt kan dina frågor snabbare läsa värde från JSON-text eftersom ingen parsning behövs. Varje gång JSON i denna rad ändras kommer värdet att beräknas igen.

Lägger till index på JSON-sökvägen

Frågor som filtrerar eller sorterar data efter något värde i JSON-kolumnen använder vanligtvis full tabellskanning.

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

För att optimera den här typen av frågor kan du lägga till icke-bestående beräknad kolumn som exponerar JSON-uttryck som används i filter eller sortering (i det här exemplet JSON_VALUE (Data, '$. Färg')) och skapa index i denna kolumn:

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

CREATE INDEX idx_JsonColor
ON ProductCollection(vColor)

Frågor kommer att använda indexet istället för vanlig tabellskanning.

JSON lagras i minnet tabeller

Om du kan använda minnesoptimerade tabeller kan du lagra JSON som text:

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

Fördelar med JSON i minnet:

  • JSON-data finns alltid i minnet så det finns ingen diskåtkomst
  • Det finns inga lås och spärrar när du arbetar med JSON


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow