MySQL优化,电商系统的变形金刚困境

360影视 欧美动漫 2025-05-24 09:14 2

摘要:是的我知道,你用了JSON,但是可能订单系统每秒处理3000个请求,但促销活动时总是崩溃!!!

背景

在瞬息万变的电商战场上,你是否也面临这样的困局?每个类目的商品都像变形金刚般拥有不同的属性组合:

服饰类:颜色、尺码、材质、季节适用性...

3C数码:屏幕尺寸、CPU型号、电池容量、防水等级...

生鲜食品:产地、净含量、保质期、储存温度...

是的我知道,你用了JSON,但是可能订单系统每秒处理3000个请求,但促销活动时总是崩溃!!!

传统方案

方案1 多加一张属性表 或者采用宽表

方案2 把规格设置为JSON字段解决

然后查询你就这样处理

然后促销时,你发现这个查询竟然用了十几秒,原来走了全表扫描。

破局

通过为JSON字段创建虚拟列并建立索引,可以显著提升查询效率。

虚拟列(Generated Column):基于表中其他列的值动态计算生成,不占用存储空间(VIRTUAL)或存储计算结果(STORED)。索引优化:对虚拟列创建索引后,查询可直接利用索引加速,避免全表扫描和JSON解析开销。实践

1 创建虚拟列语法:

ALTER TABLE 表名ADD COLUMN 虚拟列名 数据类型GENERATED ALWAYS AS (JSON_UNQUOTE(JSON_EXTRACT(JSON字段名, '$.JSON路径'))) VIRTUAL;

2 给虚拟列添加索引

3 验证查询

3.1 原始查询

3.2 改进后的查询

虚拟列还有一个好处是,如果JSON字段值 发生变话 会自动更新。

虚拟列只能查询,不能直接更新虚拟列字段。

最后

希望大家在实际工作中,用上这个高级技巧,提升查询效率。

来源:小轩科技论

相关推荐