简单谈谈MySQL5.7 JSON格式检索
发布时间 - 2026-01-10 22:14:53 点击率:次MySQL5.7版本开始支持JSON格式,在创建表时,可以指定列表的数据类型为JSON,但是如何在JSON格式上创建索引呢??

本人做了一个简单测试。
第一步:建立一个包含JSON类型的表:
CREATE TABLE json_test` ( id` int (8) NOT NULL AUTO_INCREMENT, content` json NOT NULL , PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
第二步:初始化数据
insert into json_test(content) value( '{"name":"zhangsan","age":18}' );
insert into json_test(content) value( '{"name":"lisi","age":19}' );
insert into json_test(content) value( '{"name":"wangwu","age":20}' );
第三步:查询JSON类列的数据
select json_extract(content, '$.name' ) from json_test where json_extract(content, '$.name' )= "zhangsan" ;
通过expain分析改查询语句,发现其走全表扫描
在网上查询资料,得知如果要在JSON列上进行检索,需要对检索的key创建虚拟列,然后再虚拟列上创建索引
第四步:在content列上,对"name"建立虚拟列
ALTER TABLE json_test ADD name_virtual varchar (32) GENERATED ALWAYS AS (json_extract(content, '$.name' )) VIRTUAL;
第五步:对虚拟列创建索引
CREATE INDEX name_virtual_index ON json_test(name_virtual);
再次做查询( 注,where条件需要使用虚拟列来进行检索,如果直接用JSON列比较,还是会走全表扫描 )
explain select json_extract(content, '$.name' ) from json_test where name_virtual= "zhangsan" \G
总结:
其实MySQL通过一种空间换时间的做法,类似创建一个触发器,把JSON列上的数据冗余存储到虚拟列上,比较的时候通过走虚拟列的索引,再定位到实际数据。
# MySQL
# 5.7
# JSON
# 详解Mysql中的JSON系列操作函数
# MySQL操作之JSON数据类型操作详解
# mysql全面解析json/数组
# Mysql怎么存储json格式数据详解
# PHP连接MySQL数据库并以json格式输出
# MySQL5.7 JSON类型使用详解
# Mysql如何对json数据进行查询及修改
# MybatisPlus如何处理Mysql的json类型
# Mysql5.7中JSON操作函数使用说明
# mysql 如何使用JSON_EXTRACT() 取json值
# mysql的json处理实现
# 要在
# 然后再
# 建立一个
# 第二步
# 创建一个
# 人做
# 第三步
# 第四步
# 第五步
# 在网上
# 如何在
# KEY
# PRIMARY
# content
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
网站制作壁纸教程视频,电脑壁纸网站?
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
🚀拖拽式CMS建站能否实现高效与个性化并存?
Laravel如何实现API版本控制_Laravel版本化API设计方案
移动端脚本框架Hammer.js
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
如何在宝塔面板创建新站点?
*服务器网站为何频现安全漏洞?
Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】
Java垃圾回收器的方法和原理总结
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
如何自定义建站之星网站的导航菜单样式?
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
高性价比服务器租赁——企业级配置与24小时运维服务
高防服务器如何保障网站安全无虞?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
原生JS获取元素集合的子元素宽度实例
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
如何在IIS7中新建站点?详细步骤解析
Linux安全能力提升路径_长期防护思维说明【指导】
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
nodejs redis 发布订阅机制封装实现方法及实例代码
如何彻底卸载建站之星软件?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
大同网页,大同瑞慈医院官网?
Laravel如何保护应用免受CSRF攻击?(原理和示例)
如何挑选优质建站一级代理提升网站排名?
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
如何用狗爹虚拟主机快速搭建网站?
如何快速重置建站主机并恢复默认配置?
如何在Windows环境下新建FTP站点并设置权限?
网易LOFTER官网链接 老福特网页版登录地址
Laravel怎么为数据库表字段添加索引以优化查询
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
如何制作一个表白网站视频,关于勇敢表白的小标题?
linux写shell需要注意的问题(必看)
Laravel安装步骤详细教程_Laravel环境搭建指南
JS中对数组元素进行增删改移的方法总结
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
JavaScript如何实现路由_前端路由原理是什么
如何实现javascript表单验证_正则表达式有哪些实用技巧
如何快速查询网址的建站时间与历史轨迹?
WordPress 子目录安装中正确处理脚本路径的完整指南
Laravel如何配置和使用缓存?(Redis代码示例)

