SELECT id, name FROM t_product WHERE name LIKE '蓝牙%' AND category_id = 12 LIMIT 20;
商品搜索接口按名称模糊匹配,慢日志里单次请求平均 900 毫秒,中间件日志显示 targets 是全部 16 个片。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,百分号在两边时无法从条件里提取分片键,路由只能广播。每个片都要扫一遍二级索引再回表,片数越多总耗时越长。
「模糊查询路由」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。
处理上按这个顺序:把这类查询迁到搜索引擎 用倒排索引替代 like;必须留在库里的只保留前缀匹配 让索引能走范围扫描;按分片键先圈定范围 再在片内模糊匹配;给广播查询加超时和条数上限。
改完只确认一件事:搜索接口 P99 降到 120 毫秒以内 路由日志不再出现全片广播。
