Szukaj…


JSON zapisany jako kolumna tekstowa

JSON jest formatem tekstowym, więc jest przechowywany w standardowych kolumnach NVARCHAR. Kolekcja NoSQL jest równoważna z dwiema tabelami wartości kluczy:

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

Użyj nvarchar(max) ponieważ nie masz pewności, jaki byłby rozmiar twoich dokumentów JSON. nvarchar(4000) i varchar(8000) mają lepszą wydajność, ale z limitem wielkości do 8 KB.

Upewnij się, że JSON jest poprawnie sformatowany przy użyciu ISJSON

Ponieważ JSON jest przechowywany w kolumnie tekstowej, możesz chcieć upewnić się, że jest on poprawnie sformatowany. Możesz dodać ograniczenie CHECK do kolumny JSON, która sprawdza, czy tekst JSON jest poprawnie sformatowany:

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

Jeśli masz już tabelę, możesz dodać ograniczenie sprawdzania za pomocą instrukcji ALTER TABLE:

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

Ujawnij wartości z tekstu JSON jako kolumny obliczane

Można wyświetlić wartości z kolumny JSON jako kolumny obliczane:

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

Jeśli dodasz kolumnę obliczeniową PERSISTED, wartość z tekstu JSON zostanie zmaterializowana w tej kolumnie. W ten sposób twoje zapytania mogą szybciej odczytać wartość z tekstu JSON, ponieważ nie jest potrzebne parsowanie. Za każdym razem, gdy JSON w tym wierszu zmienia się, wartość zostanie ponownie obliczona.

Dodanie indeksu do ścieżki JSON

Zapytania, które filtrują lub sortują dane według pewnej wartości w kolumnie JSON, zwykle używają pełnego skanowania tabeli.

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

Aby zoptymalizować tego rodzaju zapytania, możesz dodać nietrwałą kolumnę obliczeniową, która eksponuje wyrażenie JSON używane w filtrze lub sortowaniu (w tym przykładzie JSON_VALUE (Dane, '$ .Color')) i utworzyć indeks w tej kolumnie:

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

CREATE INDEX idx_JsonColor
ON ProductCollection(vColor)

Zapytania będą używać indeksu zamiast zwykłego skanowania tabeli.

JSON przechowywany w tabelach w pamięci

Jeśli możesz użyć tabel zoptymalizowanych pod kątem pamięci, możesz przechowywać JSON jako tekst:

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

Zalety JSON w pamięci:

  • Dane JSON są zawsze w pamięci, więc nie ma dostępu do dysku
  • Podczas pracy z JSON nie ma blokad ani zatrzasków


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow