Microsoft SQL Server
JSONをSQLテーブルに保存する
サーチ…
JSONはテキスト列として保存されます
JSONはテキスト形式なので、標準NVARCHAR列に格納されます。 NoSQLコレクションは、2つの列のキー値テーブルと同等です。
CREATE TABLE ProductCollection (
Id int identity primary key,
Data nvarchar(max)
)
JSONドキュメントのサイズがわからない場合は、 nvarchar(max)
を使用してください。 nvarchar(4000)
およびvarchar(8000)
パフォーマンスは向上しますが、サイズの制限は8KBです。
ISONを使用してJSONが適切にフォーマットされていることを確認する
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'
これらの種類のクエリを最適化するには、フィルタまたはソートで使用されるJSON式(この例ではJSON_VALUE(Data、 '$ .Color'))を公開する非永続計算列を追加し、この列にindexを作成します。
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