Microsoft SQL Server
JSON opslaan in SQL-tabellen
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