Представление отчета о баллах Oracle на основе нескольких сложных запросов - PullRequest
0 голосов
/ 21 августа 2011

Я хотел бы создать инструмент отчетности в базе данных Oracle, который рассчитывает оценку на основе результата нескольких довольно сложных запросов, которые работают с разными таблицами.Все эти запросы дадут мне список конкретных идентификаторов, если определенные критерии соответствуют.

Вот пример:

Представьте, что будет три запроса "Найти все идентификаторы пользователей, которые живут в Сиэтле", "Найти все идентификаторы пользователей, которые купили автомобиль во времяпоследние три месяца »и« Найти все идентификаторы пользователей, которые перемещались в пределах США более 3 раз ».Каждый из этих запросов будет получать оценку для пользователя, если для запроса найден идентификатор пользователя, например, запрос 1 = 3 балла, запрос 2 = 5 баллов, запрос 3 = 2 балла.Конечный результат должен содержать список пользователей и их идентификаторы, которые соответствуют хотя бы одному из запросов.Набор результатов будет упорядочен по сумме всех нисходящих баллов.Набор результатов должен быть актуальным.

| user_id | points_lived_in_seattle | points_bought_car | points_moved | sum |
------------------------------------------------------------------------------
|     123 |                       3 |                 0 |            2 |   5 |
|     456 |                       0 |                 3 |            0 |   3 |
|     789 |                       0 |                 0 |            2 |   2 |

Каков наилучший способ создания такого инструмента отчетности в Oracle?Я думал создать представление, но это будет очень сложно, потому что в ближайшем будущем к нему можно добавить 20 или более запросов.Также меня беспокоит тот факт, что объединения, объединяющие все запросы, работают неправильно и вызывают неправильный набор результатов.

Другой вариант, о котором я думал, - это создать материализованное представление для каждого из запросов иодно представление, которое просто создает оценку на основе других представлений.

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

1 Ответ

0 голосов
/ 21 августа 2011

Почему вы думаете о материализованных взглядах? Протестируйте запросы в одном утверждении и, если они достаточно быстрые, используйте их. Если нет, и вы проверили свои индексы, почему бы просто не вставить результаты в таблицу, а затем «выбрать * из порядка таблицы по сумме desc»?

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