MySQL 8.0 之 JSON_CONTAINS()

8.0.24版本前存在mysql的一个bug:json索引不生效


问题描述:
通过测试,上线之后,发现网页某个推荐界面空白,查找原因之后发现有个接口响应超时,检查后不存在问题,对比测试与生产环境的sql结构也不存在问题,执行sql语句:

    SELECT count(1) FROM table_xxx
    WHERE json_contains(字段名,"查询的值")

执行结果:

测试环境:零点几秒;
生产环境:几十秒没响应;


问题解决:

经过仔细对比发现测试环境数据为 8.0.25 版本,生产为 8.0.19 版本,其余各种配置及代码分支都一致;

最终在mysql的官方文档(https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-24.html)的 bug fix 中找到了:

在这里插入图片描述原来 json_contains 在 8.0.24 版本前 索引是没有生效 的。。。

更新生产的mysql版本至 8.0.25 解决;

(ps: 开发过程中尽量保证测试和生产环境的配置和库表结构以及版本一致)


json_contains() 用法:

  1. json_contains(表中的字段名, “查询的值”);

  2. json_contains(表中的字段名, “查询的值”, “$.json的key”);

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐