MySQLでJSONデータ型を利用してみる

posted in: MySQL | 0

MySQLではJSONデータ型なるものが Ver 5.7からあります。
名前のとおりJSONデータ形式を扱うデータ型です。
JSONデータ型を利用すると、RDBでありながらスキーマレスな使い方をすることが可能です。

定義の仕方

データ型にJSONを指定する。

サンプルデータを投入。

JSONデータ型からageを抽出してSELECT文を実行
関数利用方法:JSON_EXTRACT(col, ‘$.検索キー’

さらにMySQL 5.7.9 以降では下記のような省略した書き方もできます。
取得結果は同じです。
関数利用方法:col->’$.検索キー’

≪取得結果≫

code name age
u0001 dcom taro 30
u0002 dcom jiro 25
u0003 dcom hanako NULL

Generated Columnの利用

このJSONデータ型に対して、Generated Columnを利用してみます。

ALTERであれば…

取得するときはカラムを指定するだけで可能です。

と、Generated Column はJSONデータ型に対しても扱うことができます。
通常のGeneratedColumnと同じく、「VIRTUAL」指定であっても
テーブルエンジンが InnoDB の場合に限りインデックスを張ることが可能です。
使い方次第では便利なデータ型ですね。

おわりに

どういった内容をJSONデータ型として扱うべきなのかは難題です。
JSONデータ型は多くの情報を1カラムに持つため、データ内の更新が遅くなる傾向にあるようです。
そのため、使う際は更新のパフォーマンスに気を使う必要があります。

検索のパフォーマンスでは3万件程度のレコードであれば、
JSONデータ型内を検索する簡易なSELECT程度で0.1秒以内に返ってきました。

LINEで送る
Pocket