首页 > 代码库 > 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 [ 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索引创建实战
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。