MySQL5.7中JSON字段虚拟列的使用

前言

看了IT老齐的视频学习到的干货,记录一下,视频地址:https://www.bilibili.com/video/BV1WP4y1K7xB/?p=133&spm_id_from=pageDriver

准备

MySQL至少需要5.7版本,因为5.7之后才支持json字段

1.创建表

CREATE TABLE `weiyiji` (
  `id` bigint(20) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `extra` json DEFAULT NULL
  PRIMARY KEY (`id`),
  KEY `index_age` (`age`) COMMENT '年龄索引'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `weiyiji` (`id`, `name`, `extra`) VALUES (1, '张三', '{\"age\": 100, \"name\": \"abc\"}');
INSERT INTO `weiyiji` (`id`, `name`, `extra`) VALUES (2, '李四', '{\"age\": 105, \"name\": \"abc\"}');

2.根据指定属性查询数据

SELECT
	name,
	extra ->'$.age',
	extra ->'$.name'
FROM
	`weiyiji`
	WHERE  extra ->'$.age'= 10;

3.根据JSON函数生成虚拟列

ALTER TABLE weiyiji ADD COLUMN age INT4 GENERATED ALWAYS AS (
	JSON_UNQUOTE(
	JSON_EXTRACT( extra, _utf8mb4 '$.age' ))) VIRTUAL NULL;

4.给生成的虚拟列创建索引

在这里插入图片描述

5.根据索引查询数据

SELECT
	name,
	extra ->'$.age',
	extra ->'$.name'
FROM weiyiji WHERE age = 10;

小结

这样通过单独给指定要查询的属性生成虚拟列并且添加上索引后,就可以大大的提高数据的查询效率,并且如果修改指定属性的值时,生成的虚拟列也可以自动生成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值