Снежинка строит сводную таблицу, используя объединение в postgresql медленно (объединение объединяет слишком много строк) - PullRequest
0 голосов
/ 21 апреля 2020

Это сценарии генерации из класса хранилища данных в моем универе: https://www.dropbox.com/sh/3pk8hsfe0u55l6u/AADTathEAEBiYd2qYX38qGSga?dl=0

Задача состоит в том, чтобы создать хранилище данных с использованием схемы звезды из операционной базы данных: операционная база данных

Задача состоит в том, чтобы удалить определитель измерения и построить сводную таблицу следующим образом: звездообразная схема

Последний шаг - создание таблицы фактов из нескольких измененных 'таблицы измерений

create table Final as
select O.Citizenship, O.Year, O.Grade, O.Total_Students_Overall, L.Total_Students_Listening, R.Total_Students_Reading, W.Total_Students_Writing, S.Total_Students_Speaking
from OverallFactNew O
    inner join ListeningFactNew L on O.countrycode = L.countrycode and O.citizenship = L.citizenship and O.year = L.year and O.grade = L.grade
    inner join ReadingFactNew R on R.countrycode = L.countrycode and R.citizenship = L.citizenship and R.year = L.year and R.grade = L.grade
    inner join WritingFactNew as W on (R.countrycode = W.countrycode and R.citizenship = W.citizenship and R.year = W.year and R.grade = W.grade)
    inner join SpeakingFactNew as S on (S.countrycode = W.countrycode and S.citizenship = W.citizenship and S.year = W.year and S.grade = W.grade); 

Он застрял (когда я запустил объяснение по этому запросу, объединение слиянием занимает 300 миллионов строк, но мои данные для объединения составляют только 900 строк * 4 таблицы.

Я исследовал операцию объединения в psql. Она показала, что она не возвращает автоматически отдельные строки (всегда декартовы произведения).

Университет научил нас oracle sql разработчику. Запрос выполнялся за секунды, довольно быстро во вкусе oracle. Я не знаю, почему это может произойти. (Кстати, я думаю, что oracle документы отстой, поэтому я обратился к psql)

Спасибо за вашу помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...