mysql JSON特性优化

有朋友问到,mysql如果要根据json中的某个属性过滤,数据量大的话,性能很差,要如何提高性能?

为什么要用json串?

由于一些特定场景,mysql需要用到json串,例如文档,不同的文档可能包含的属性不一样,且属性个数较多,这个时候用json存储比较合适,不然用宽表,影响性能,维护也麻烦(例如后期新增属性之类的)

好了,不废话,直接上方案

前置条件

创建表test,包含如下数据

常规的过滤

(全表扫描,效率低)

sql 复制代码
select id,name,extra from test where extra->'$.tid'='t3';

如何提升性能?

这里可以根据mysql5.7引入的虚拟列来解决

sql 复制代码
ALTER TABLE test ADD COLUMN v_tid varchar(32) GENERATED ALWAYS AS (
	JSON_UNQUOTE(
	JSON_EXTRACT( extra, _utf8mb4 '$.tid' ))) VIRTUAL NULL;

后面可以为这个虚拟列创建索引,根据虚拟列来过滤即可

sql 复制代码
select id,name,extra from test where v_tid='t3';

注意:如果要删除虚拟列,可以执行如下语句

sql 复制代码
ALTER TABLE test DROP COLUMN v_tid;
相关推荐
XuCoder3 分钟前
你写的每条 SQL 都没加过锁,可 MySQL 凭什么不怕两个事务打架?
数据库·后端
2301_8009549913 分钟前
MySQL 数据库基础:数据类型、查询与备份恢复
数据库·mysql·oracle
起名真的太难了14 分钟前
Mysql的数据类型,查询与备份操作
数据库·sql·mysql
程序猿_极客15 分钟前
【免费】分享一套优质的基于Php+Mysql的电子购物网站的设计与实现,校园小卖部系统
数据库·mysql·php·购物商城系统
fīɡЙtīиɡ ℡16 分钟前
LLM/Agent 安全实战核心要点总结
网络·数据库·安全
程序员夏洛17 分钟前
MySQL 中有哪些锁类型?
数据库·mysql
Hive_MOM18 分钟前
制造企业技术文件与图纸管理数字化(DCC):从“图纸满天飞“到版本受控
服务器·数据库·制造
咋的啥名都用不了呢~19 分钟前
Oracle数据库1
数据库
小则又沐风a24 分钟前
MySQL表的约束详解
数据库·mysql
赵渝强老师35 分钟前
【赵渝强老师】崖山数据库的联机重做日志文件
数据库·国产数据库·yashandb·崖山数据库