MySQL 5.7新支持--------Json索引创建实战
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 [ name 为虚拟列, virtual 表明不占用磁盘空间 ]
[ GENERATED ALWAYS 与 VIRTUAL可以不写 ]
指定获取json中的name key
mysql> CREATE TABLE json_key( -> uid BIGINT PRIMARY KEY NOT NULL AUTO_INCREMENT, -> data JSON NOT NULL, -> name VARCHAR(32) GENERATED ALWAYS AS (json_extract(data, ‘$.name‘)) VIRTUAL, -> )ENGINE=INNODB CHARSET=utf8mb4;
* 插入数据带 data中name key [ 插入数据时需要显示指定非虚拟列 ]
mysql> INSERT INTO json_key(uid, data) SELECT NULL, JSON_OBJECT(‘name‘, ‘tom‘, ‘sex‘, ‘male‘, ‘age‘, ‘26‘); Query OK, 1 row affected (0.02 sec) Records: 1 Duplicates: 0 Warnings: 0
* 插入数据不带 data中name key
mysql> INSERT INTO json_key(uid, data) SELECT NULL, JSON_OBJECT(‘sex‘, ‘female‘, ‘age‘, ‘29‘); Query OK, 1 row affected (0.01 sec) Records: 1 Duplicates: 0 Warnings: 0
* 查看json_key所有数据
mysql> select * from json_key; +-----+---------------------------------------------+-------+ | uid | data | name | +-----+---------------------------------------------+-------+ | 1 | {"age": "26", "sex": "male", "name": "tom"} | "tom" | | 2 | {"age": "29", "sex": "female"} | NULL | +-----+---------------------------------------------+-------+ 2 rows in set (0.01 sec)
4. 总结
以需求驱动技术,技术本身没有优略之分,只有业务之分。
本文出自 “sea” 博客,请务必保留此出处http://lisea.blog.51cto.com/5491873/1943389
以上是关于MySQL 5.7新支持--------Json索引创建实战的主要内容,如果未能解决你的问题,请参考以下文章
mySQL 5.7 使用新的 json 功能将行作为 json 返回
MySQL 5.7开始支持JSON,那还有必要使用MongoDB存JSON吗?请列出你的观点/理由。