PostgreSQL объединяет две таблицы и объединяет их с третьей таблицей - PullRequest
3 голосов
/ 17 мая 2011

Я хочу объединить таблицы и объединить их с третьей таблицей метаданных, и я хотел бы знать, какой подход является лучшим / быстрым?
База данных является PostgreSQL.
Ниже мои два предложения, но приветствуются и другие подходы.

Чтобы выполнить объединение перед объединением на обеих таблицах:

SELECT a.id, a.feature_type, b.datetime, b.file_path
FROM table1 a, metadata b WHERE a.metadata_id = b.id
UNION ALL
SELECT a.id, a.feature_type, b.datetime, b.file_path
FROM table2 a, metadata b WHERE a.metadata_id = b.id

Или сначала выполнить объединение, а затем выполнить объединение:

SELECT a.id, a.feature_type, b.datetime, b.file_path
FROM
(
    SELECT id, feature_type, metadata_id FROM table1
    UNION ALL
    SELECT id, feature_type, metadata_id FROM table2
)a, metadata b
WHERE a.metadata_id = b.id

Ответы [ 3 ]

7 голосов
/ 17 мая 2011

Запустите EXPLAIN ANALYZE для обоих операторов, и вы увидите, какой из них более эффективен.

1 голос
/ 17 мая 2011

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

0 голосов
/ 17 мая 2011

Насколько я помню, запуск Explain покажет, что PostgreSQL интерпретирует второе как первое при условии, что в нет условия group by (явного или неявного из-за union вместо union all) в любом из подзапросов.

...