I faced with MySql query which takes too much CPU and time to execute
The query is looks like
Select * from table where table.a LIKE %a% OR table.a LIKE %b% OR table.a LIKE %c%
We do need this LIKE statements, due to business requirements (we need to look for any equalities).
So how it is possible to speed it up? Is there any caches we could use? Is there some NoSql solutions would be good? I suppose that even if we load all table to memory we still will have poor performance due to full-text scans because of these LIKEs.
Will it be better if we use regexp there? What approaches are typically good for such text-search purposes? If we switch to NoSql, will it be better? What particular product can help us?
The problem is that wildcarded searches can't make very efficient use of indexes, hence your performance issues. RegEx will be no better, in fact it will probably be worse.
I'd suggest setting up a fulltext index on that field if the reason you are using wildcards is to pick out individual words from a textual field. It will allow you to do searches without wildcards for individual words. However, it won't help much if you are searching on parts of words like your example %b%.
Switching to NoSQL because of a few queries performing poorly seems like extreme overkill, and I doubt it would help enough to justify it for that reason alone.