Microsoft SQL Server
Speichern von JSON in SQL-Tabellen
Suche…
JSON als Textspalte gespeichert
JSON hat ein Textformat und wird daher in NVARCHAR-Standardspalten gespeichert. Die NoSQL-Sammlung entspricht einer zweispaltigen Tabelle mit Schlüsselwerten:
CREATE TABLE ProductCollection (
Id int identity primary key,
Data nvarchar(max)
)
Verwenden Sie nvarchar(max)
da Sie nicht sicher sind, wie groß Ihre JSON-Dokumente sein sollen. nvarchar(4000)
und varchar(8000)
eine bessere Leistung, jedoch mit einer Größenbeschränkung von 8 KB.
Stellen Sie sicher, dass JSON mit ISJSON ordnungsgemäß formatiert ist
Da JSON in einer Textspalte gespeichert ist, möchten Sie möglicherweise sicherstellen, dass diese ordnungsgemäß formatiert ist. Sie können eine CHECK-Einschränkung für die JSON-Spalte hinzufügen, die prüft, ob der Text richtig formatiert ist.
CREATE TABLE ProductCollection (
Id int identity primary key,
Data nvarchar(max)
CONSTRAINT [Data should be formatted as JSON]
CHECK (ISJSON(Data) > 0)
)
Wenn Sie bereits über eine Tabelle verfügen, können Sie mit der Anweisung ALTER TABLE eine Prüfbedingung hinzufügen:
ALTER TABLE ProductCollection
ADD CONSTRAINT [Data should be formatted as JSON]
CHECK (ISJSON(Data) > 0)
Zeigen Sie Werte aus JSON-Text als berechnete Spalten an
Sie können Werte aus der JSON-Spalte als berechnete Spalten verfügbar machen:
CREATE TABLE ProductCollection (
Id int identity primary key,
Data nvarchar(max),
Price AS JSON_VALUE(Data, '$.Price'),
Color JSON_VALUE(Data, '$.Color') PERSISTED
)
Wenn Sie die berechnete Spalte PERSISTED hinzufügen, wird der Wert aus dem JSON-Text in dieser Spalte angezeigt. Auf diese Weise können Ihre Abfragen Werte schneller aus JSON-Text lesen, da keine Analyse erforderlich ist. Bei jeder Änderung von JSON in dieser Zeile wird der Wert neu berechnet.
Index für JSON-Pfad hinzufügen
Abfragen, die Daten nach einem bestimmten Wert in der JSON-Spalte filtern oder sortieren, verwenden normalerweise die vollständige Tabellensuche.
SELECT * FROM ProductCollection
WHERE JSON_VALUE(Data, '$.Color') = 'Black'
Um diese Art von Abfragen zu optimieren, können Sie eine nicht persistierte berechnete Spalte hinzufügen, die den in Filter oder Sortierung verwendeten JSON-Ausdruck (in diesem Beispiel JSON_VALUE (Data, '$ .Color')) bereitstellt, und einen Index für diese Spalte erstellen:
ALTER TABLE ProductCollection
ADD vColor as JSON_VALUE(Data, '$.Color')
CREATE INDEX idx_JsonColor
ON ProductCollection(vColor)
Abfragen verwenden den Index anstelle der einfachen Tabellensuche.
JSON in In-Memory-Tabellen gespeichert
Wenn Sie speicheroptimierte Tabellen verwenden können, können Sie JSON als Text speichern:
CREATE TABLE ProductCollection (
Id int identity primary key nonclustered,
Data nvarchar(max)
) WITH (MEMORY_OPTIMIZED=ON)
Vorteile von JSON im In-Memory:
- JSON-Daten befinden sich immer im Speicher, sodass kein Zugriff auf die Festplatte möglich ist
- Es gibt keine Sperren und Verriegelungen während der Arbeit mit JSON