Ответ - нет, не в общем случае, хотя это может зависеть от того, что вы подразумеваете под эффективностью. Для этих целей я буду использовать следующее определение: «Эффективно использует индексы и объединения в разумном порядке», что, вероятно, так же хорошо, как и любое.
В этом случае «эффективные» запросы могут быть «s-arg», что означает, что они могут использовать поиск индекса для сужения предикатов поиска. Равенства (тройные объединения) и простые неравенства могут сделать это. Предикаты «И» также могут делать это. После этого мы переходим к просмотру таблиц, индексов и диапазонов, т. Е. Операций, которые должны сравнивать записи по записям (или индекс-ключ по ключу индекса).
В ответе Sontek описан метод встраивания функциональности регулярных выражений в запрос, но операции по-прежнему должны сравнивать записи по записям. Заключение его в функцию позволило бы создать индекс на основе функции, в котором результат вычисления материализован в индексе (Oracle поддерживает это, и вы можете получить эквивалентную функциональность в SQL Server, используя приемы, описанные в этой статье ). Однако вы не можете сделать это для произвольного регулярного выражения.
В общем случае семантика регулярного выражения не подходит для сокращения наборов соответствий, как это делает индекс, поэтому интеграция поддержки rexegp в оптимизатор запросов, вероятно, невозможна.