
站内搜索是数据库压力最大的地方之一,模糊匹配和大偏移分页会使一次查询消耗成倍的资源。
采用不同的匹配方法。对标题和摘要进行全文索引,将前置通配符的模糊查询替换为索引检索,排序字段单独建立索引,防止全表扫描参与排序。
结果层加缓存。热门关键词的结果集缓存几分钟,同一个关键词的重复请求直接命中;联想词和搜索建议采用独立的缓存,命中率一般比结果页要高。
拆分和限流一起使用。把搜索分成召回和排序两个阶段,召回只取主键以及必要的字段,排序在内存中进行;对于单一来源的高频请求进行限速,超过阈值就返回简化后的结果或者提示稍后再试。超长词和超短词分别设置长度边界,防止为极低频的请求付出全部成本。
用慢查询日志来验证一下,主要查看扫描的行数和临时表,指标下降才算是真的起作用了。