下面一起来了解下MySQL 5.7新支持- - - - - - - - - -如何创建Json类型索引,相信大家看完肯定会受益匪浅,文字在精不在多,希望MySQL 5.7新支持- - - - - - - - - -如何创建Json类型索引这篇短内容是你想要的。
1。背景
*,在MySQL 5.7.8中,MySQL支持由RFC 7159定义的本地JSON数据类型,它支持对JSON (JavaScript对象标记)文档中的数据进行有效访问。
*, MySQL会对DML JSON数据自动验证。无效的DML JSON数据操作会产生错误。
,,*优化的存储格式。存储在JSON列中的JSON文档转换为一种内部格式,允许对JSON元素进行快速读取访问。
,,* MySQL Json类型支持通过虚拟列方式建立索引,从而增加查询性能提升。
2。Json索引
,,*创建Json索引表json_key(名称为虚拟列,虚拟表明不占用磁盘空间)
[生成总是与虚拟可以不写,)
,,,,指定获json中取的名字关键
mysql>, CREATE TABLE json_key ( ,,,,,uid BIGINT PRIMARY KEY NOT NULL AUTO_INCREMENT, ,,,,,data JSON NOT 空, ,,,,,name VARCHAR (32), GENERATED ALWAYS AS (json_extract(数据,& # 39;. name # 39;美元)),虚拟的, ,,,,,)引擎=INNODB CHARSET=utf8mb4;
,,*创建虚拟列名称索引,
mysql>, alter table users add key (名称); Query 好吧,,0,rows affected (0.05,秒) 记录:0,,重复:,0,,警告:,0
,,*插入数据带数据中名称关键(插入数据时需要显示指定非虚拟列)
mysql>, INSERT INTO json_key (uid,数据),SELECT 空,,JSON_OBJECT(& # 39;名字# 39;,,& # 39;汤姆# 39;,,& # 39;性与# 39;,,& # 39;男性# 39;,,& # 39;年龄# 39;,,& # 39;26 & # 39;); Query 好吧,,1,row affected (0.02,秒) 记录:1,,重复:,0,,警告:,0
,,*插入数据不带数据中名称关键
mysql>, INSERT INTO json_key (uid,数据),SELECT 空,,JSON_OBJECT(& # 39;性与# 39;,,& # 39;女# 39;,,& # 39;年龄# 39;,,& # 39;29日& # 39;); Query 好吧,,1,row affected (0.01,秒) 记录:1,,重复:,0,,警告:,0
,,*查看json_key所有数据
mysql>, select *,得到json_key; + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + | |,uid data ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, |, name | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + |,,,1,|,{“age":,“26”,,“sex":,“male",,“name":,“tom"}, |,“tom" | |,,,2,|,{“age":,“29”,,“sex":,“female"},,,,,,,,,,,,,, |, NULL | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + 2,rows set 拷贝;(0.01,sec)
3。查询测试
,,*通过json方法查询
mysql>, explain select *,得到json_key where json_extract(数据,& # 39;. name # 39;美元),=,& # 39;汤姆# 39;\ G * * * * * * * * * * * * * * * * * * * * * * * * * * *,1只row * * * * * * * * * * * * * * * * * * * * * * * * * * * ,,,,,,,,,,,,1 select_type才能:简单 ,,,,,,,表:json_key ,,分区:零 ,,,,,,,,类型:所有 possible_keys:零 ,,,,,,,,,关键:零 ,,,,,key_len:零 ,,,,,,,,,裁判:零 ,,,,,,,,行:2 ,,,,过滤:100.00 ,,,,,,,额外:Using 1,row 集,拷贝,1,warning (0.00, sec)
,,*通过虚拟列查询
mysql>解释select * from json_key name=& # 39;汤姆# 39;\ G
* * * * * * * * * * * * * * * * * * * * * * * * * * * 1。行* * * * * * * * * * * * * * * * * * * * * * * * * * *
,,,,,1,id:
,select_type:简单的
,,,,表:用户
,,分区:空
,,,,,类型:裁判
possible_keys:名称
,,,,,关键:名称
,,,key_len: 1023
,,,,,裁判:const
,,,,,行:1
,,,过滤:100.00
,,,,null null