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;
相关推荐
0***v7771 小时前
MySQL四种备份表的方式
mysql·adb·oracle
6***S2222 小时前
SQL Server Management Studio的使用
数据库·oracle·性能优化
合作小小程序员小小店2 小时前
桌面开发,拼车管理系统开发,基于C#,winform,sql server数据库
开发语言·数据库·sql·microsoft·c#
百***49009 小时前
SQL Server查看数据库中每张表的数据量和总数据量
数据库·sql·oracle
代码or搬砖10 小时前
MyBatisPlus中的常用注解
数据库·oracle·mybatis
盼哥PyAI实验室10 小时前
MySQL 数据库入门第一课:安装、账户、库、表与数据操作详解
数据库·mysql
谢尔登11 小时前
原来Webpack在大厂中这样进行性能优化!
前端·webpack·性能优化
h***593312 小时前
MySQL如何执行.sql 文件:详细教学指南
数据库·mysql
郑重其事,鹏程万里12 小时前
键值存储数据库(chronicle-map)
数据库·oracle
Doro再努力12 小时前
【MySQL数据库09】外键约束与多表查询基础
数据库·mysql