Microsoft SQL Server
JSON을 SQL 테이블에 저장하기
수색…
텍스트 열로 저장된 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으로 작업하는 동안 잠금 및 래치가 없습니다.