MySQL百万级商品数据UI筛选选项实时更新查询方案问询
筛选后获取剩余可选筛选值方案
核心思路
基于当前用户已选择的筛选条件,对未使用的筛选属性分别执行去重查询,提取该属性在筛选结果集中所有存在的可选值——这样得到的就是用户后续可以选择的剩余筛选选项。
具体SQL示例
假设当前用户选择了colour = 'blue',要获取其他筛选属性(Size、Name等)的可选值:
- 获取Size的可选值:
SELECT DISTINCT Size FROM products WHERE colour = 'blue' ORDER BY Size;
- 获取Name的可选值(若Name作为筛选维度,比如商品分类名称):
SELECT DISTINCT Name FROM products WHERE colour = 'blue' ORDER BY Name;
如果用户同时选择了多个筛选条件(比如colour='blue' AND Size='L'),只需把所有已选条件加到WHERE子句中:
SELECT DISTINCT Brand FROM products WHERE colour = 'blue' AND Size = 'L' ORDER BY Brand;
性能优化建议
针对100万级别的数据量,必须优化查询速度:
- 给每个筛选属性单独创建索引,比如:
CREATE INDEX idx_products_colour ON products(colour); CREATE INDEX idx_products_size ON products(size); CREATE INDEX idx_products_brand ON products(brand);
- 如果存在高频组合筛选(比如colour+size),可以创建联合索引进一步提速:
CREATE INDEX idx_products_colour_size ON products(colour, size);
- 若属性存在大量NULL值且业务不需要展示,可以在WHERE中加上
AND 属性名 IS NOT NULL,减少查询范围。
注意事项
- 不能依赖分页后的50条数据提取可选值,必须基于全量筛选结果集查询,否则会漏掉仅在未分页数据中存在的选项。
- 可选值查询建议在后端批量执行,一次性返回所有剩余筛选组的可选值给前端,避免多次请求。
内容的提问来源于stack exchange,提问作者reddfox
相关产品推荐
相关产品推荐

