gar g where exists (
select local_name
from osm_boundaries ob
where ob.admin_level = 6 and ob.local_name like concat('%',g.name,'%')
)
в gar 1,5 ляма строк
Подумай над индексирование admin_level иlocal_name. Нужно учесть, что % в начале шаблона не даст делать поиск по индексированному полю local_name
на admin_level есть индекс. и в explain видно, что он используется. с like индекс не поможет
Индекс с like поможет только если знака % нету слева, но для этого нужно индекс с спец оператором создавать (text_pattern_ops). См. https://postgrespro.ru/docs/postgresql/13/indexes-opclass Если знак % с 2-ух сторон, то, видимо, только полнотекстовый поиск, используя tsvector и tsquery, а также оператор @@.
Ещё индекс с pg_trgm может помочь https://postgrespro.ru/docs/postgresql/12/pgtrgm
индекс по функции? хм... подумаю, спасибо
Да, тоже может помочь!
Мне кажется Inner join и gin индекс в таблице gar по имени должно помочь
Да tsvector лучшее решение, без нормализации естественно.
Обсуждают сегодня