摘要:是的我知道,你用了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字段值 发生变话 会自动更新。
虚拟列只能查询,不能直接更新虚拟列字段。
最后
希望大家在实际工作中,用上这个高级技巧,提升查询效率。
来源:小轩科技论