技术文摘
MySQL 5.7 新特性:Json Column 与 Generated Column(下)
MySQL 5.7 新特性:Json Column 与 Generated Column(下)
在 MySQL 5.7 中,Generated Column 为数据库设计带来了诸多便利。Generated Column 即生成列,它的值是通过其他列计算得出的,并非手动插入。这一特性大大提高了数据处理的效率和准确性。
Generated Column 有虚拟(VIRTUAL)和存储(STORED)两种类型。虚拟列不占用实际存储空间,其值在查询时实时计算;存储列则将计算结果存储在磁盘上,查询时直接读取存储的值,速度更快,但会占用额外空间。
定义 Generated Column 非常简单。例如,在一个员工表中,有“基本工资”“奖金”列,我们可以定义一个“总收入”的生成列。使用如下语句:
CREATE TABLE employees (
id INT PRIMARY KEY,
base_salary DECIMAL(10, 2),
bonus DECIMAL(10, 2),
total_income DECIMAL(10, 2) GENERATED ALWAYS AS (base_salary + bonus) VIRTUAL
);
这里定义了一个虚拟的“total_income”列,它的值是“base_salary”与“bonus”之和。若想定义为存储列,只需将“VIRTUAL”替换为“STORED”。
Generated Column 在索引方面也有出色表现。由于生成列的值是基于其他列计算的,我们可以为生成列创建索引,从而加速相关查询。例如,经常需要根据“总收入”进行查询,为“total_income”列创建索引能显著提升查询性能。
CREATE INDEX idx_total_income ON employees(total_income);
再看 Json Column。在现代应用中,数据结构越来越复杂,Json 格式的数据存储需求日益增长。MySQL 5.7 的 Json Column 提供了强大的 Json 数据处理能力。
我们可以直接在表中定义 Json 类型的列。比如创建一个存储用户信息的表:
CREATE TABLE users (
id INT PRIMARY KEY,
user_info JSON
);
插入 Json 数据也很方便:
INSERT INTO users (id, user_info) VALUES (1, '{"name": "John", "age": 30, "email": "john@example.com"}');
查询 Json 数据时,MySQL 提供了丰富的函数。例如,要查询“name”为“John”的用户:
SELECT * FROM users WHERE user_info ->> '$[0].name' = 'John';
MySQL 5.7 的 Json Column 与 Generated Column 极大地增强了数据库的功能和灵活性,无论是处理复杂数据结构还是优化数据计算与查询,都为开发者提供了强大的支持,在实际项目中有着广泛的应用前景。
- MySQL组合索引失效的原因及“SELECT *”查询阻碍索引使用的缘由
- OSS静态资源存储的计费方式及流量、存储、数据处理费用计算方法
- 怎样查询某公司所有产品的最新检测报告
- Koa 中 md5.update 传递变量导致 Internal Server Error 的解决办法
- MySQL 分区表助力订单数据查询性能优化的方法
- MySQL事务异常未提交时是否需要回滚
- K8s部署MySQL 5.7出现CrashLoopBackOff错误的排查与解决方法
- MySQL 日期比较与随机月份存疑:SQL 查询结果为何总变动
- 利用 EXISTS 关键字判断两表是否存在相同记录的方法
- MySQL 统计 30 万条数据耗时 13 秒是否正常及如何优化
- 多表查询中怎样获取某公司所有产品的最新检测报告
- Mybatis 数据库厂商标识下动态 SQL 的执行方法
- Java 代码与 MySQL Where 子句:数据库查询运算操作的放置位置探讨
- Kubernetes 部署 MySQL 5.7 遭遇 CrashLoopBackOff 报错,怎样解决?
- MySQL 如何按每 5 分钟间隔汇总一天数据量