Я создал представление, которое собирает имена в отдельном столбце из его таблиц сопоставления.
Когда я присоединяюсь к своей основной таблице, запрос занимает больше времени.Я надеюсь, что это происходит из-за string_agg (), которая содержит DISTINCT.
Правильно ли мое предположение?Если это может привести к низкой производительности, есть ли способ исправить это.
Пример кода:
CREATE OR REPLACE VIEW .training_catalog_mapped_data
AS SELECT t.catalog_id,
string_agg(DISTINCT a.audiences_name::text, ','::text ORDER BY (a.audiences_name::text)) AS audiences,
string_agg(DISTINCT k.keywords_name::text, ','::text ORDER BY (k.keywords_name::text)) AS keywords,
string_agg(DISTINCT l.location_name::text, ','::text ORDER BY (l.location_name::text)) AS locations,
string_agg(DISTINCT pub.publish_to_name::text, ','::text ORDER BY (pub.publish_to_name::text)) AS publish_to,
string_agg(DISTINCT top.topic_name::text, ','::text ORDER BY (top.topic_name::text)) AS topics
FROM lat_oct_29.training_catalog t
LEFT JOIN mapping_audiences_view a ON t.catalog_id = a.catalog_id //--> This is a view
LEFT JOIN mapping_keywords_view k ON t.catalog_id = k.catalog_id //--> This is a view
LEFT JOIN mapping_location_view l ON t.catalog_id = l.catalog_id //--> This is a view
LEFT JOIN mapping_publish_to_view pub ON t.catalog_id = pub.catalog_id //--> This is a view
LEFT JOIN mapping_topic_view top ON t.catalog_id = top.catalog_id //--> This is a view
GROUP BY t.catalog_id;