Индекс, охватывающий несколько таблиц в PostgreSQL

Можно ли в PostgreSQL поместить индекс в выражение, содержащее поля нескольких таблиц. Например, индекс для ускорения запроса следующего вида:

SELECT *, (table1.x + table2.x) AS z
FROM table1
INNER JOIN table2
ON table1.id = table2.id
ORDER BY z ASC

Ответ 1

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


Update

Как отметил @petter. Материализованные представления были представлены в 9.3.

Ответ 2

Нет, это невозможно в любых продаваемых SQL файлах. Oracle поддерживает bitmap join indexes, но это может быть не актуально. Мне не ясно, хотите ли вы индексировать только столбцы объединения нескольких таблиц, или хотите ли вы индекс для произвольных столбцов соединенных таблиц.

Чтобы определить реальный источник проблем с производительностью, научитесь читать вывод PostgreSQL EXPLAIN ANALYZE.