偶遇MySQL 的JSON字段内容检索,灵活存储也需有度

前言

最近公司在做一项用户数据调查,需要统计某个值得使用频率,由于之前这个值是以一个JSON字符串形式存储的,所以不能直接用传统的方式匹配,幸亏目前数据库才做了升级版本到了5.7后来(支持JSON查询),要是放在以前,只有模糊匹配了。

分析

查看涉及到的字段是一个JSON对象数组类型,匹配的条件是用到对象的某一个字段,自不过然的想到了JSON_CONTAINS 函数来解决。

select *,JSON_EXTRACT(字段,'$[*].数组对象字段名称')  from table_name 
where JSON_CONTAINS(字段,JSON_OBJECT('json属性', "内容"))

实战

1 以产品表为例,创建name为测试字段

偶遇MySQL 的JSON字段内容检索,灵活存储也需有度

2 条件查询

偶遇MySQL 的JSON字段内容检索,灵活存储也需有度

3 获取数组里面对象的某个属性

偶遇MySQL 的JSON字段内容检索,灵活存储也需有度

演示视频

00:00

思考与总结

如果要取出数组中某一条数据,貌似MySQL就处理不了(如果大家有办法请评论一下),只有在内存中用java进行处理。所以如果涉及到查询条件的字段,不要以JSON数组的格式存储,将JSON数组拆分成一个表来单独存储。设计表时,千万不要为了图一时简单,为往后埋下坑。

© 版权声明

相关文章

4 条评论

  • 头像
    可樂浣熊- 投稿者

    大表你试了吗?用不上索引,性能差。

    无记录
    回复
  • 头像
    体育官网 读者

    是的,大表是性能差,这里是设计不合理导致的,这只是暂时的解决方案,大表就需要将数组JSON进行拆分成一个单独的表。

    无记录
    回复
  • 头像
    葡萄柚绿去冰 投稿者

    收藏了,感谢分享

    无记录
    回复
  • 头像
    李甲乙丙 投稿者

    谢谢

    无记录
    回复