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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow