Zoeken…


JSON opgeslagen als tekstkolom

JSON is tekstuele indeling, dus het is opgeslagen in standaard NVARCHAR-kolommen. NoSQL-verzameling is gelijk aan tweekoloms sleutelwaardetabel:

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

Gebruik nvarchar(max) omdat u niet zeker weet wat de grootte van uw JSON-documenten zou zijn. nvarchar(4000) en varchar(8000) hebben betere prestaties, maar met een maximale grootte van 8 KB.

Zorg ervoor dat JSON correct is opgemaakt met ISJSON

Omdat JSON een tekstkolom is, wilt u er misschien voor zorgen dat deze correct is opgemaakt. U kunt CHECK-beperking toevoegen aan de JSON-kolom die controleert of JSON tekst correct is opgemaakt:

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

Als u al een tabel hebt, kunt u controlevoorwaarde toevoegen met de instructie ALTER TABLE:

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

Geef waarden uit JSON-tekst weer als berekende kolommen

U kunt waarden uit de JSON-kolom weergeven als berekende kolommen:

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

Als u de berekende kolom PERSISTED toevoegt, wordt de waarde van de JSON-tekst in deze kolom weergegeven. Op deze manier kunnen uw vragen sneller waarde uit JSON-tekst lezen omdat er geen parsing nodig is. Telkens wanneer JSON in deze rij verandert, wordt de waarde opnieuw berekend.

Index toevoegen op JSON-pad

Query's die gegevens filteren of sorteren op een bepaalde waarde in de JSON-kolom, gebruiken meestal de volledige tabelscan.

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

Om dit soort zoekopdrachten te optimaliseren, kunt u een niet-persisteerde berekende kolom toevoegen die de JSON-expressie weergeeft die wordt gebruikt in filter of sortering (in dit voorbeeld JSON_VALUE (Data, '$ .Color')) en een index maken op deze kolom:

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

CREATE INDEX idx_JsonColor
ON ProductCollection(vColor)

Query's gebruiken de index in plaats van gewone tabelscan.

JSON opgeslagen in geheugentabellen

Als u geheugengeoptimaliseerde tabellen kunt gebruiken, kunt u JSON als tekst opslaan:

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

Voordelen van JSON in het geheugen:

  • JSON-gegevens worden altijd in het geheugen opgeslagen, dus er is geen schijftoegang
  • Er zijn geen sloten en grendels tijdens het werken met JSON


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow