> > Неужто в PG так здорово работают join-ы на больших объемах? Если
> > судить по восторгам о том как там все здорово сделано?
>
> Да, еще (в догонку к первому посту, которого почему-то не видно): не
> знаю как GIN делает, но Lucene еще хранит информацию о частоте
> использования лексемы. Таким образом можно на начальном этапе поиска
> использовать только те лексемы, которые не слишком часто встречаются и
> являются наиболее релевантными для поиска.

Частота у меня тоже есть. И статистика по общему числу использования
лексемы - тоже. Это пересчитывается каждую ночь и юзается для
построения наиболее легковестного запроса.

Суть моего вопроса не в этом. Вот у меня есть индексная таблица с
записями

<ID-лексемы> <ID-объекта>

В PG (у GIN-а) тоже такое есть.

Если у объекта 10 уникальных лексем, у меня добавиться десять записей.

Судя по описанию GIN - у них тоже.

Теперь мне нужно выбрать объекты у которых есть 3 лексемы.

Я делаю пересение трех выборок по <ID-объекта> из индексной таблицы
для первой, второй и третьей лексемы. То есть два джоина.

На 15 лимонах записей - ощутимые тормоза. Индексы для этого запроса с
двумя join-ами юзаются путевые. Значит тормоза - из самого факта
существования джоина.

А как в PG как это делается? То есть как махом выбрать объекты у
которых мои три лексемы?
Что конкретно представляет из себя их чудо индекс для точного
полнотекстового поиска?

Коваленко Дмитрий.

Ответить