缓存并加速like语句的解决方案

时间:2012-01-24 19:23:34

标签: mysql caching sql-like

我遇到了MySql查询,它占用了太多的CPU和时间来执行

查询看起来像

从表中选择*,其中table.a LIKE%a%OR table.a LIKE%b%OR table.a LIKE%c%

由于业务需求,我们确实需要这个LIKE语句(我们需要寻找任何平等)。

那么如何才能加快速度呢? 我们可以使用任何缓存吗?有一些NoSql解决方案会好吗? 我想即使我们将所有表加载到内存中,由于这些LIKE,我们仍会因全文扫描而导致性能不佳。

如果我们在那里使用正则表达式会更好吗? 哪种方法通常适用于此类文本搜索目的? 如果我们切换到NoSql,它会更好吗? 什么特定的产品可以帮助我们?

1 个答案:

答案 0 :(得分:1)

问题在于,通配符搜索无法有效地使用索引,从而导致性能问题。 RegEx将不会更好,事实上它可能会更糟。

如果您使用通配符的原因是从文本字段中挑选单个单词,我建议在该字段上设置fulltext index。它允许您在没有通配符的情况下搜索单个单词。但是,如果您搜索的是像示例%b%这样的单词部分,则无济于事。

由于一些查询表现不佳而切换到NoSQL似乎极端矫枉过正,我怀疑它仅仅因为这个原因就足以证明这一点。