Действительно не думаю, что решение регулярных выражений будет хорошим для вас с точки зрения производительности. Думаю, вам следует искать ПОЛНЫЙ текстовый поиск.
В частности, вам нужно создать полнотекстовый индекс, например, в определении таблицы:
create table testTable
(
Id int auto_increment not null,
TextCol varchar(500)
fulltext(TextCol)
);
Тогда ваш запрос станет проще:
select * from testTable where Match(TextCol) against ('web')
AND Match(TextCol) against ('server')
Настоятельно рекомендуем вам прочитать документы MySQL относительно соответствия FULLTEXT, и есть много маленьких хитростей и функций, которые будут полезны в этой задаче (включая более эффективные способы выполнения запроса выше)
Редактировать: Возможно, логический режим поможет вам найти простое решение, подобное этому:
Match(textCol) against ('web+ Server+' in boolean mode)
Все, что вам нужно сделать, это построить строку против, так что я думаю, что это можно сделать в SP без динамического SQL