Короткий ответ: «Нет». В настоящее время нет структуры индекса, доступной на любой платформе СУБД, которая будет индексировать частичные совпадения регулярного выражения, подобного этому.
Длинный ответ заключается в том, что ведущая константа в подстановочном совпадении (например, 'foo_'
) может использоваться в качестве префикса для индексных совпадений. Многие платформы СУБД оптимизируют это и используют индекс (если доступен) для разрешения префикса. Однако это не так умно, как полное регулярное выражение, и индексирование можно использовать только при наличии постоянного префикса.
Еще более длинный ответ заключается в том, что существуют алгоритмы, такие как RETE , которые оптимизируют частичные совпадения, подобные этому. Это может быть применимо, если вы можете выразить свои совпадения в виде правил прямого продвижения, а не регулярных выражений.
Rete работает путем вычисления частичных совпадений и только представления правил, которые могут быть достигнуты из этого частичного совпадения, поэтому он более эффективен, чем O (n) (больше похоже на O (log n), но я не уверен в точном времени сложность) для сопоставления n правил с фактом.