在电商系统中,订单列表页面临着十几个筛选条件(如订单号、用户ID、店铺ID、订单状态、支付方式、创建时间、订单金额等)且允许用户随意组合的场景。 这是传统关系型数据库(MySQL)最头疼的问题之一。因为MySQL通常一次查询只能使用一个索引(虽然有Index Merge,但效率并不总是理想),且组合索引必须遵循最左前缀法则。不可能为所有组合创建数百个索引,那会导致写入性能崩溃。 要应对这种场景,必须从MySQL索引设计优化、产品交互限制以及架构演进三个维度来综合解决。 --- 第一步:MySQL 纯数据库层面的索引设计策略 在数据量未达到海量(例如单表几百万以内)时,可以通过精心设计几个核心的联合索引来覆盖 80% 以上的常见查询。 1. 字段分类与特征分析 首先,将所有的筛选条件进行分类: 高频且高区分度(精准查询): (订单号)、(买家ID)、(卖家ID)、(手机号)。 高频但低区分度(枚举类): (状态)、(支付方式)。 范围查询: (下单时间)、(支付时间)、(金额)。 2. 索引设计的三大黄金法则 等值查询在前,范围查询在后: 联合索引中,必须把 或 的条件放在前面,把...