Индекс Postgres, охватывающий отдельные таблицы - PullRequest
0 голосов
/ 26 марта 2019

TL; DR

Можно ли применить объединение, охватывающее несколько таблиц в одной базе данных в Postgres?

Более длинная версия

Имеется база данных, содержащая одну transactions таблицу фактов:

customer  product   amount
       1        1       50
       1       53       20
       2        8       35
       2       11       40
       2       28       45

вместе с одной products таблицей размеров:

id    color    shape  material
 1     blue    round    fabric
 2      red   square      wood
 3     blue     oval      wood
 4   yellow   square   plastic

и одна customers таблица размеров:

id     income     city
 1       high   london
 2        low    paris
 3       high   berlin
 4     medium   london

Если я денормализую базу данных, включив в нее всю информацию о продукте и клиенте для каждой строки транзакции, тогда очень легко применить индексы ко всем атрибутам продукта / клиента. Однако это происходит за счет того, что полученная денормализованная таблица становится потенциально очень большой (особенно, когда начинает добавляться множество таблиц измерений).

Можно ли применять аналогичные индексы, пока таблицы фактов и измерений остаются отдельными? Например, при выполнении следующего запроса будет использоваться индекс customer-city_product-shape, чтобы избежать полного сканирования таблицы при transactions:

SELECT
    t.customer,
    t.amount
FROM
    transactions t
LEFT JOIN
    products p on p.id = t.product
    customers c on c.id = t.customer
WHERE
    c.city = 'london' and p.shape = 'round'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...