模糊查询的优化

问一下有对数据查询有研究的大师,一般情况下,使用sql进行模糊查询的时候,喜欢使用like '%abc%'。但个人感觉这应该不是最优的。有没有哪位资深人士给提供一个最优解决方案?

非资深,随便谈。

模糊查询通常有下面三种

1.前匹配: like %abc
2.后匹配: like abc%
3.全匹配: like %abc%

只有第一种,可以用到DB的索引(如果你有的话)。
后两种是全表走查,所以性能会差。也没什么能优化的。
这里的差是相对的,比如我有过千万级数据的模糊查询的实现。条件是那个查询不常用;异步显示查询结果;客户也明白且接受那个速度。

如果成为问题且需要解决,网上搜关键字“全文检索”。
大体上是DB层面上的话,

  • 用插件比如MySQL
  • 买付费功能比如Oracle(本来就死贵的来着)

或者脱离开DB,上全文检索引擎比如Lucene之类的。
(需要注意中文和英文的区别)