Интересно как этот intersect будет работать с множествами c сотнями
тысяч записей. Формально, конечно, побыстрее чем join записей.

Если твоя система умная, то она такие лексемы сначала проигнорирует, а потом подумает, что быстрее - каждый документ просмотреть или же все-таки пересечение с очень большим списком делать (или вообще нафиг ее выбросить).

Но мне хочется отказаться от пересечений в принципе.

Тогда смотри в сторону GiST - это так называемые "signature files"-алгоритмы. Для каждого документа считается битовая маска определенной длины. Такая же маска считается для запроса. Дальше - бинарные операции с последующим просмотром каждого документа для фильтрации false positived.

В общем случае быстродействие этих алгоритмов хуже чем для inverted files (твой вариант), но читай также инфо от PgSQL - они утверждают, что GiST лучше для часто-обновляемых баз.

Роман

Ответить