수색…


텍스트 열로 저장된 JSON

JSON은 텍스트 형식이므로 표준 NVARCHAR 열에 저장됩니다. NoSQL 모음은 두 개의 열 키 값 표와 같습니다.

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

JSON 문서의 크기가 확실하지 않으므로 nvarchar(max) 를 사용하십시오. nvarchar(4000)varchar(8000) 성능은 좋지만 크기 제한은 8KB입니다.

JSON이 ISJSON을 사용하여 올바르게 포맷되었는지 확인하십시오.

JSON은 텍스트 컬럼에 저장되어 있으므로 제대로 포맷되었는지 확인하고 싶을 수 있습니다. JSON 열에 CHECK 제약 조건을 추가하여 올바른 형식의 텍스트인지 확인 JSON :

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

이미 테이블이있는 경우 ALTER TABLE 문을 사용하여 CHECK 제약 조건을 추가 할 수 있습니다.

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

계산 된 열로 JSON 텍스트의 값 노출

JSON 열의 값을 계산 열로 표시 할 수 있습니다.

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

PERSISTED 계산 열을 추가하면 JSON 텍스트의 값이이 열에 나타납니다. 이렇게하면 파싱이 필요하지 않기 때문에 쿼리를 JSON 텍스트에서 더 빨리 읽을 수 있습니다. 이 행의 JSON이 변경 될 때마다 값이 다시 계산됩니다.

JSON 경로에 색인 추가하기

JSON 열의 일부 값으로 데이터를 필터링하거나 정렬하는 쿼리는 일반적으로 전체 테이블 검색을 사용합니다.

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

이러한 종류의 쿼리를 최적화하려면 filter 또는 sort (이 예제에서는 JSON_VALUE (Data, '$ .Color'))에 사용 된 JSON 표현식을 노출하는 비 지속성 계산 열을 추가하고이 열에 인덱스를 만듭니다.

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

CREATE INDEX idx_JsonColor
ON ProductCollection(vColor)

쿼리는 일반 테이블 스캔 대신 인덱스를 사용합니다.

메모리 내 테이블에 저장된 JSON

메모리 최적화 테이블을 사용할 수 있으면 JSON을 텍스트로 저장할 수 있습니다.

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

인 메모리에서 JSON의 장점 :

  • JSON 데이터는 항상 메모리에 있으므로 디스크에 액세스 할 수 없습니다.
  • JSON으로 작업하는 동안 잠금 및 래치가 없습니다.


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow