MySQL JSON 字段查询方法总结

| 选择喜欢的代码风格  

在 MySQL 中查询 JSON 字段中的数组值,有几种方法可以找到部门包含 "X20" 的人员:

方法一:使用 JSON_CONTAINS 函数:


SELECT * FROM employees WHERE JSON_CONTAINS(department_field, '"X20"');

方法二:使用 JSON_SEARCH 函数:


SELECT * FROM employees WHERE JSON_SEARCH(department_field, 'one', 'X20') IS NOT NULL;

方法三:使用 MEMBER OF 操作符 (MySQL 8.0.17+):


SELECT * FROM employees WHERE 'X20' MEMBER OF(department_field);

方法四:使用 JSON_TABLE 函数 (MySQL 8.0+):


SELECT DISTINCT e.* 
FROM employees e, JSON_TABLE(
  e.department_field,
  '$[*]' COLUMNS(
    dept VARCHAR(10) PATH '$'
  )
) AS jt 
WHERE jt.dept = 'X20';
 

效率排序(从高到低):


  1. MEMBER OF 操作符 (MySQL 8.0.17+)
    • 最高效的解决方案
    • 专门为 JSON 数组成员检查优化
    • 执行计划最简单
  2. JSON_CONTAINS 函数
    • 专为 JSON 包含检查设计
    • 比 JSON_SEARCH 更高效,因为它不需要返回路径
  3. JSON_SEARCH 函数
    • 需要扫描整个 JSON 查找匹配项
    • 比 JSON_CONTAINS 稍慢,因为要返回路径信息
  4. JSON_TABLE 函数
    • 效率最低
    • 需要为每一行展开 JSON 数组
    • 资源消耗最大,特别是大数据量时

MySQL 8.0+ 给 JSON 字段增加索引:


ALTER TABLE employees ADD INDEX idx_dept ((CAST(department_field AS CHAR(255) ARRAY)));
 

CommandNotFound ⚡️ 坑否 - 其他频道扩展阅读:




发表评论