详解MySQL中JSON数据类型用法及与传统JSON字符串对比

 更新时间:2025年07月23日 16:21:15   作者:Microi风闲  
MySQL从 5.7 版本开始引入了 JSON 数据类型,专门用于存储 JSON 格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型用法并与传统JSON字符串对比,希望对大家有所帮助

前言

MySQL从 5.7 版本开始引入了 JSON 数据类型,专门用于存储 JSON 格式的数据。与传统的将 JSON 作为字符串存储在 VARCHARTEXT 字段中相比,JSON 数据类型提供了更好的存储效率和查询性能。

基本用法

-- 创建包含JSON字段的表
CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    attributes JSON,
    json_string TEXT
);

-- 插入JSON数据
INSERT INTO products (name, attributes, json_string) VALUES (
    'Laptop',
    '{"brand": "Dell", "specs": {"cpu": "i7", "ram": "16GB"}, "tags": ["electronics", "computer"]}',
    '{"brand": "Dell", "specs": {"cpu": "i7", "ram": "16GB"}, "tags": ["electronics", "computer"]}'
);

JSON数据类型 vs 传统JSON字符串

1. 存储方式

JSON数据类型:以优化的二进制格式存储,解析后的结构

传统JSON字符串:纯文本存储,需要每次使用时解析

2. 查询方式对比

使用LIKE查询传统JSON字符串

-- 查询品牌为Dell的产品(传统JSON字符串方式)
SELECT * FROM products WHERE json_string LIKE '%"brand": "Dell"%';

这种方式的缺点:

  • 无法使用索引
  • 可能产生误匹配(如值中包含相同字符串)
  • 性能差,需要全表扫描

使用JSON函数查询JSON数据类型

-- 查询品牌为Dell的产品(JSON数据类型方式)
SELECT * FROM products WHERE JSON_EXTRACT(attributes, '$.brand') = 'Dell';
-- 或使用箭头语法(MySQL 8.0+)
SELECT * FROM products WHERE attributes->'$.brand' = '"Dell"';

优点:

  • 可以使用生成的列和索引
  • 精确查询,不会误匹配
  • 性能更好

3. 索引支持

JSON字段可以通过生成列添加索引:

-- 为JSON字段的brand属性创建索引
ALTER TABLE products ADD COLUMN brand VARCHAR(50) 
    GENERATED ALWAYS AS (JSON_UNQUOTE(attributes->'$.brand')) STORED;
CREATE INDEX idx_brand ON products(brand);

JSON存储对象和数组的性能考虑

1. 存储对象

{
  "brand": "Dell",
  "specs": {
    "cpu": "i7",
    "ram": "16GB"
  }
}
  • 查询性能:直接访问嵌套属性比传统JSON字符串解析快得多
  • 索引:可以为嵌套属性创建索引(通过生成列)

2. 存储数组

{
  "tags": ["electronics", "computer", "laptop"]
}

查询包含特定元素的数组

SELECT * FROM products WHERE JSON_CONTAINS(attributes->'$.tags', '"electronics"');

性能考虑

  • 数组查询通常比简单属性查询慢
  • 大数组可能影响性能
  • 考虑将频繁查询的数组元素提取到单独的表中

性能对比总结

特性JSON数据类型传统JSON字符串
存储效率
查询性能
索引支持支持不支持
复杂查询能力
嵌套对象访问性能
数组操作性能
数据验证

最佳实践建议

  • 对于需要频繁查询的JSON属性,考虑提取为单独的列并建立索引
  • 避免在JSON中存储过大的数组
  • MySQL 8.0+对JSON支持更好,优先使用新版本
  • 对于简单键值对,考虑使用传统的关系型设计而非JSON
  • 使用JSON_VALID()约束确保数据完整性

JSON数据类型在大多数场景下都比传统JSON字符串存储方式性能更好,特别是在查询和索引支持方面。但对于简单应用或不需要查询JSON内容的情况,传统字符串方式可能更简单。

到此这篇关于详解MySQL中JSON数据类型用法及与传统JSON字符串对比的文章就介绍到这了,更多相关MySQL JSON数据类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL中基本的用户和权限管理方法小结

    MySQL中基本的用户和权限管理方法小结

    这篇文章主要介绍了MySQL中基本的用户和权限管理方法小结,是MySQL入门学习中的基础知识,需要的朋友可以参考下
    2015-08-08
  • MySQL长字符截断的实现示例

    MySQL长字符截断的实现示例

    本文主要介绍了MySQL长字符截断的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 在MySQLDump中使用-w语句进行备份的方法

    在MySQLDump中使用-w语句进行备份的方法

    这篇文章主要介绍了在MySQLDump中使用-w语句进行备份的方法,MySQLDump是一款很有人气的MySQL数据转存工具,需要的朋友可以参考下
    2015-05-05
  • MySQL基本操作语句小结

    MySQL基本操作语句小结

    这篇文章主要介绍了MySQL的基本操作语句,是MySQL入门学习中的基础知识,需要的朋友可以参考下
    2015-07-07
  • MySQL中的FIND_IN_SET函数的使用场景

    MySQL中的FIND_IN_SET函数的使用场景

    MySQL 中的 FIND_IN_SET() 函数用于在一个逗号分隔的字符串列表中查找指定的值,并返回其在列表中的位置,下面就来介绍一下FIND_IN_SET函数的具体使用,感兴趣的可以了解一下
    2024-05-05
  • 阿里云服务器MySQL与nacos配置

    阿里云服务器MySQL与nacos配置

    本文主要介绍了阿里云服务器MySQL与nacos配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-03-03
  • Mysql DBA 20天速成教程

    Mysql DBA 20天速成教程

    准备一台pc,一根网线和20天无打扰的空余时间,把MySQL 5.1参考手册设置为浏览器首页,按下面列表逐条学习即可,这本中文手册包括基本上所有的内容,补充知识google也都能查到,学习平台采用linux
    2014-03-03
  • MySQL服务启动与停止的实现方式

    MySQL服务启动与停止的实现方式

    这篇文章主要介绍了MySQL服务启动与停止的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • sql server自动编号的三种方法

    sql server自动编号的三种方法

    自增列是最简单和常见的方法,适用于大多数情况,本文介绍了SQL Server中三种常见的自动编号方法:自增列、序列和触发器,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • MySQL进行大数据量分页的优化技巧分享

    MySQL进行大数据量分页的优化技巧分享

    mysql大数据量分页情况下性能会很差,所以本文就来讲一讲mysql大数据量下偏移量很大,性能很差的问题,并附上解决方式,希望对大家有所帮助
    2024-01-01

最新评论