Есть ли способ полезного индексирования текстового столбца, содержащего шаблоны регулярных выражений?
Я использую PostgreSQL, в настоящее время версия 9.2, но я открыт для обновления.
В одной из моих таблиц у меня есть столбец типаtext
который хранит шаблоны регулярных выражений.
CREATE TABLE foo (
id serial,
pattern text,
PRIMARY KEY(id)
);
CREATE INDEX foo_pattern_idx ON foo(pattern);
Затем я делаю запросы на это так:
INSERT INTO foo (pattern) VALUES ('^abc.*Я понимаю, что это как бы наоборотLIKE
или обратное совпадение Если бы это был другой, более распространенный способ, если мой стог сена был в базе данных, а моя игла была на якоре, я мог бы более или менее эффективно использовать индекс btree в зависимости от точного шаблона поиска и данных.
Но данные, которые у меня есть, представляют собой таблицу шаблонов и другие данные, связанные с шаблонами. Мне нужно спросить базу данных, какие строки имеют шаблоны, соответствующие тексту моего запроса. Есть ли способ сделать это более эффективным, чем последовательное сканирование, которое проверяет каждую строку в моей таблице?
);
SELECT * FROM foo WHERE 'abc literal string' ~ pattern;
Я понимаю, что это как бы наоборотLIKE
или обратное совпадение Если бы это был другой, более распространенный способ, если мой стог сена был в базе данных, а моя игла была на якоре, я мог бы более или менее эффективно использовать индекс btree в зависимости от точного шаблона поиска и данных.
Но данные, которые у меня есть, представляют собой таблицу шаблонов и другие данные, связанные с шаблонами. Мне нужно спросить базу данных, какие строки имеют шаблоны, соответствующие тексту моего запроса. Есть ли способ сделать это более эффективным, чем последовательное сканирование, которое проверяет каждую строку в моей таблице?