Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PostgreSQL > Попасть в индекс при использовании replace


Автор: polin11 2.12.2018, 06:18
Использую СУБД Postgresql
Есть индекс по полю Код и индекс по условию lower("Код")
В запросах 
Код

select *
from "Коды"
where "Код" like 'Оди%'
select *
from "Коды"
where lower("Код") like 'Оди%'

Попадаю в нужные индексы. 
Проблема возникает при желании удалить пробелы: 
Код

select *
from "Коды"
where replace("Код", ' ','') like 'Оди%'
select *
from "Коды"
where replace(lower("Код"), ' ','') like 'Оди%'

Как правильно создать индекс, чтобы использовался в 2 проблемных запросах?

Автор: Akina 2.12.2018, 22:39
Цитата(polin11 @  2.12.2018,  07:18 Найти цитируемый пост)
индекс по условию lower("Код")

Это индекс по выражению.

Цитата(polin11 @  2.12.2018,  07:18 Найти цитируемый пост)

Как правильно создать индекс, чтобы использовался в 2 проблемных запросах? 

Нужно создавать индекс именно по используемому выражению. Например, для первого запроса по выражению replace(lower("Код"), ' ','').

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)