2010-06-05 3 views
0

У меня есть внутреннее соединение на регулярных выражениях - это очень медленно. Есть ли простой способ ускорить это? Я использую postgres.Внутреннее соединение по регулярным выражениям

FROM A 
inner join B ON trim(lower(replace(replace(replace(B.enginequery,',',' '),'"',' '),'+',' '))) = trim(lower(A.keyphrase)) 
      OR trim(lower(replace(replace(replace(B.enginequery,',',' '),'"',' '),'+',' '))) ~ (trim(lower(A.keyphrase)) || '$') 
      OR trim(lower(replace(replace(replace(B.enginequery,',',' '),'"',' '),'+',' '))) ~ (trim(lower(A.keyphrase)) || ' ') 
+0

Alex: Вы получили ответ, который искали? Если да, не могли бы вы принять его? Если нет, не могли бы вы уточнить, что вы все еще ищете? Обычно, чем больше информации вы предоставляете, тем вероятнее, что это кто-то может вам помочь. – MaasSql

ответ

3

Есть ли простой способ ускорить этот процесс?

Причина, по которой работает производительность, - это все операции, не говоря уже о регулярном выражении, которые должны выполняться только для того, чтобы сделать совпадение. Вам нужно упростить отношения, чтобы их не нужно было выполнять.

+0

Это действительно похоже на то, что ваша схема нуждается в переосмыслении. Присоединение к таким выражениям всегда будет медленным. Вы можете (возможно, я не знаю вашу полную схему) пошаговую проблему с производной таблицей, чтобы ограничить проделанную работу, но это не решение. – d11wtq

+1

Функциональный индекс * может * помочь, но вам действительно нужно переосмыслить тот дизайн, который требует этого. – rfusca

1

Я хотел бы начать с размещения результатов:

 
trim(lower(replace(replace(replace(B.enginequery,',',' '),'"',' '),'+',' '))) 

в столбец в таблице. По крайней мере, тогда не придется многократно вычислять его. Как вы реализуете это в postgres, я не знаю. В Ms sql server я бы попробовал вычисляемый столбец, чтобы мои приложения не нуждались в обновлении B.enginequery и его очищенной версии.

И тогда я, вероятно, в конечном итоге попытаюсь индексировать этот очищенный столбец.

Смежные вопросы