我想在Oracle数据库中构建一个报告工具,该工具根据在不同表上工作的多个相当复杂的查询的结果来计算得分。如果某些条件匹配,所有这些查询都会为我提供特定ID的列表。
以下是一个例子:
想象一下,会有三个查询“查找位于西雅图的所有用户ID”,“查找过去三个月内购买汽车的所有用户ID”和“查找在美国境内移动的所有用户ID超过3个倍”。如果为查询找到用户ID,则这些查询中的每一个都将获得用户的分数,例如查询1 = 3分,查询2 = 5分,查询3 = 2分。最终结果应该提供与至少一个查询匹配的用户及其ID的列表。结果集将按所有得分降低的总和排序。结果集应该是最新的。
| 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个或更多的查询可以添加到此。此外,我担心结合所有查询的联接不能正常工作并导致不正确的结果集。
我想到的另一个选择是为每个查询创建一个物化视图,一个视图根据其他视图创建评分。
你会如何解决这个问题?如果一个查询非常慢,那么对整个数据库的性能影响可能是什么?
答案 0 :(得分:0)
为什么要考虑具体化的观点?在一个语句中测试查询,如果它们足够快,则使用它们。如果没有,并且您已经检查了索引,为什么不将结果插入表中,然后“通过sum desc从表顺序中选择*”?