Mysql Json格式

Mysql Json格式

提示:学习笔记
mysql5.7后提供的一种反范式数据格式,非常适合代替MoungoDB


前言

Mysql提供的Json数据格式,约束性小,不俗的查询性能


一、应用场景

如文章,文章分类,特殊文章又有特殊字段等等需要好几张表保存的数据,每次查询或筛选要查好几张表,如果都放在一张表如果有一对多的列又不好处理,这也是MoungoDB在这方面广泛应用的一部分原因,mysql的json存储格式,在低约束下,提供了json内字段的索引功能,保持了不错的性能.

二、使用步骤

1.选择json格式

在这里插入图片描述
Mysql Json格式_第1张图片

2.读数据

select [普通表字段],[json字段]->‘ . [ j s o n 内 数 据 字 段 ] ′ f r o m [ 表 名 ] W H E R E [ j s o n 字 段 ] − > ′ .[json内数据字段]' from [表名] WHERE [json字段]->' .[json]from[]WHERE[json]>.[json内数据字段]’=“9803”
Mysql Json格式_第2张图片

3.创建json字段虚拟列

这样子可以将json内的字段当作一个普通字段进行查询
在这里插入图片描述
创建虚拟列后 查询sql与普通查询没什么区别
Mysql Json格式_第3张图片
该虚拟列会跟随json列改变,但虚拟列不能被修改
Mysql Json格式_第4张图片

4.虚拟列创建索引

Mysql Json格式_第5张图片

总结

该结构非常适合加快查询速度,做到一表查询一次查询,避免多表查询数据,也可以使数据列动态扩充。可以创建索引也使他保存了很强的性能

附带sql

CREATE TABLE t_a_activity (
activity_id int unsigned NOT NULL AUTO_INCREMENT COMMENT ‘活动编号,自增编号’,
extra_info json DEFAULT NULL
PRIMARY KEY (activity_id) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=11762 DEFAULT CHARSET=utf8mb3 COMMENT=‘活动基本信息表’;

INSERT INTO t_a_activity( extra_info) VALUES (‘{“phone”: “”, “c_time”: “1648711007”, “u_time”: “1648711097”, “sponsor”: “”, “end_time”: “1651334399”, “owner_id”: “3”, “parent_id”: “0”, “title_pic”: “”, “use_scene”: “0”, “fans_limit”: “0”, “max_amount”: “1000.00”, “owner_type”: “0”, “qrcode_url”: “”, “start_time”: “1646742400”, “activity_id”: “9803”, “cancel_unit”: “1”, “platform_id”: “2”, “show_in_app”: “1”, “show_in_xcx”: “1”, “template_id”: “69”, “activity_pic”: “marketing/v2/activity/20220329142418148/5568220f-1082-4372-af73-cd7820966bfe/砸金蛋2(2).png”, “examine_time”: “0”, “activity_addr”: “”, “activity_type”: “10”, “examine_state”: “3”, “platform_type”: “1”, “register_rule”: “1”, “reward_repeat”: “1”, “reward_target”: “1”, “activity_state”: “4”, “activity_title”: “砸金蛋正式活动”, “examine_remark”: “”, “show_in_advert”: “1”, “activity_remark”: “砸金蛋正式活动”, “register_enable”: “1”, “owner_proxy_id_1”: “35011723”, “owner_proxy_id_2”: “0”, “owner_proxy_id_3”: “0”, “owner_proxy_id_4”: “0”, “activity_subtitle”: “砸金蛋正式活动”, “distribute_enable”: “0”, “platform_proxy_id”: “35011723”, “reward_grant_mode”: “2”, “template_theme_id”: “91”, “reward_condition_id”: “62”, “activity_template_id”: “76”, “reward_integral_rule”: “”, “max_prize_probability”: “100.000000”, “reward_condition_code”: “1”, “prize_probability_mode”: “1”}’);

select t_a_activity.*,extra_info->‘KaTeX parse error: Double subscript at position 26: …state' from t_a_̲activity WHERE ….activity_state’=“4” limit 4
select * from t_a_activity where v_activity_id=9803

alter table t_a_activity
add COLUMN activity_state varchar(32)
generated always as (json_unquote(json_extract(extra_info,_utf8mb4 ‘$.activity_state’))) virtual null

select * from t_a_activity where activity_state=4 limit 4

create index index_activity_state on t_a_activity(activity_state)

你可能感兴趣的:(mysql,mysql,nosql,mongodb,性能优化)