使用MySQL_JSON查询筛选嵌套字段的值方式

使用MySQL JSON查询筛选嵌套字段的值方式

围绕 JSON查询筛选嵌套字段的值,原文主要从 理解 JSON 数据的层级结构、使用 MySQL JSON 查询函数、注意事项 这些层面展开。和只讲概念的文章不同,它把问题落到可直接执行的 SQL、DDL 或运维命令上,便于你先在测试环境验证语义,再确认对生产实例的影响范围。

本文介绍了如何在MySQL中查询JSON字段中的特定数据,通过使用JSON_EXTRACT和JSON_UNQUOTE函数,可以方便地从嵌套的JSON结构中提取所需的信息,此外,还讨论了性能优化和数据规范化建议,以提高查询效率 这版内容会保留与题目强相关的代码块,并补上执行前后的验证点,例如 EXPLAIN、SHOW WARNINGS、测试数据集回放、函数边界样例验证。 当前最值得关注的关键词包括 JSON、SQL 语义、函数边界、执行开销、MySQL JSON查询筛选。MySQL 8.x 给了 JSON_TABLE、生成列和函数索引等手段,但是否划算,仍取决于读写比例和数据结构稳定性。

理解 JSON 数据的层级结构

理解 JSON 数据的层级结构 这一部分建议结合下面的代码一起看。原文在这里重点展开的是 相关 SQL / 命令,不是只停留在概念定义,而是把 JSON查询筛选嵌套字段的值 放到可执行对象上说明,便于先在测试库复现,再判断是否适合迁入生产。语法类主题建议一边看代码,一边验证结果集与执行计划,避免把演示写法直接带进生产。

像 理解 JSON 数据的层级结构 这种语法点,经常不是不会写,而是没人系统验证边界条件。NineData 的 SQL 代码审核在这里更有价值,它更适合把多表连接、CTE、窗口函数、JSON 处理或冲突更新这类高复杂度 SQL 在提交前做一次规则和风险筛查。

实操时至少要关注 deviceType :在 JSON 顶层。;techParams :是一个嵌套对象,里面包含了 ownership 等字段。;ownership :目标字段,位于 techParams 内。。如果这一步会修改对象定义、锁范围或日志链路,最好把执行前对象状态和执行后结果一并留档。涉及 JSON 查询时,先判断需求是临时查询、固定报表还是高频过滤;如果高频依赖 JSON 内部字段,往往要把热点字段投影成可索引列。

本节检查点

  • deviceType :在 JSON 顶层。
  • techParams :是一个嵌套对象,里面包含了 ownership 等字段。
  • ownership :目标字段,位于 techParams 内。

配图 1:主题梳理图

使用 MySQL JSON 查询函数

使用 MySQL JSON 查询函数 这一部分建议结合下面的代码一起看。原文在这里重点展开的是 JSON 提取,不是只停留在概念定义,而是把 JSON查询筛选嵌套字段的值 放到可执行对象上说明,便于先在测试库复现,再判断是否适合迁入生产。语法类主题建议一边看代码,一边验证结果集与执行计划,避免把演示写法直接带进生产。

实操时至少要关注 JSON_EXTRACT(json_doc, path) :从 JSON 中提取值。;JSON_UNQUOTE(json_val) :去掉 JSON 提取值的引号,返回纯文本。。如果这一步会修改对象定义、锁范围或日志链路,最好把执行前对象状态和执行后结果一并留档。涉及 JSON 查询时,先判断需求是临时查询、固定报表还是高频过滤;如果高频依赖 JSON 内部字段,往往要把热点字段投影成可索引列。

使用 MySQL JSON 查询函数:JSON 提取

SELECT *
FROM site_device
WHERE JSON_UNQUOTE(JSON_EXTRACT(detail, '$.techParams.ownership')) = 'top';

本节检查点

  • JSON_EXTRACT(json_doc, path) :从 JSON 中提取值。
  • JSON_UNQUOTE(json_val) :去掉 JSON 提取值的引号,返回纯文本。

注意事项

注意事项 这一部分建议结合下面的代码一起看。原文在这里重点展开的是 ALTER TABLE 维护、JSON 提取,不是只停留在概念定义,而是把 JSON查询筛选嵌套字段的值 放到可执行对象上说明,便于先在测试库复现,再判断是否适合迁入生产。语法类主题建议一边看代码,一边验证结果集与执行计划,避免把演示写法直接带进生产。

执行完成后,最好结合 EXPLAIN、SHOW WARNINGS、测试数据集回放、函数边界样例验证 保留验证结果,避免只看语句是否成功返回。如果这一步会修改对象定义、锁范围或日志链路,最好把执行前对象状态和执行后结果一并留档。涉及 JSON 查询时,先判断需求是临时查询、固定报表还是高频过滤;如果高频依赖 JSON 内部字段,往往要把热点字段投影成可索引列。

注意事项:ALTER TABLE 维护

ALTER TABLE site_device
ADD COLUMN ownership VARCHAR(50) GENERATED ALWAYS AS (JSON_UNQUOTE(JSON_EXTRACT(detail, '$.techParams.ownership'))) STORED,
ADD INDEX idx_ownership (ownership);

配图 2:排查与治理清单

生产落地与验证建议

把 JSON查询筛选嵌套字段的值 放到生产环境时,建议按“先复现原文示例、再看对象状态、最后做结果校验”的顺序推进。至少要明确语句作用对象、执行窗口、失败回滚路径,以及对性能或并发的潜在影响。

如果这一类操作会直接碰到索引、事务、权限或日志链路,更要把验证动作标准化,例如保留执行前快照、执行 SQL、返回结果,以及 EXPLAIN、SHOW WARNINGS、测试数据集回放、函数边界样例验证 相关的检查输出。涉及 JSON 查询时,先判断需求是临时查询、固定报表还是高频过滤;如果高频依赖 JSON 内部字段,往往要把热点字段投影成可索引列。

本节检查点

  • deviceType :在 JSON 顶层。
  • techParams :是一个嵌套对象,里面包含了 ownership 等字段。
  • ownership :目标字段,位于 techParams 内。
  • JSON_EXTRACT(json_doc, path) :从 JSON 中提取值。
  • JSON_UNQUOTE(json_val) :去掉 JSON 提取值的引号,返回纯文本。
  • 先把业务语义写对,再做结构优化。
posted @ 2026-03-25 14:39  数据库管理工具  阅读(22)  评论(0)    收藏  举报