设计从两个不同的oracle数据库查询的选项

时间:2015-06-16 03:22:35

标签: oracle union

我们有一个只有2周数据的交易数据库和另一个保存超过2周数据的存档数据库。两个DB共享相同的模式结构,并且位于不同的服务器中。我们有一个报告应用程序,它从这两个数据库中查询数据,用户通过下拉选择选择要查询的数据库。为了改善用户体验,我们正在考虑通过在背景中使DB选择透明来取消下拉选择。以下是我们想到的几个选项

  1. 通过DB链接使用UNION进行2个选择查询
  2. 首先查询DB1,如果没有记录查询DB2
  3. 由于数据量越来越多,我们对我们的选择感到担忧。 如果有人对如何处理此问题有任何其他建议,请感谢。

1 个答案:

答案 0 :(得分:0)

在我看来,最好的两个选择是:

  • 始终向用户提供比相对日期更新的数据(例如,最近三个月的数据)。
  • 始终向用户提供最后n个数据(例如最新的250行)。

当您拥有大型数据集时,所有数据都会效率低下。

但是,如果您想加强自主权并保护用户的工作(用户界面中的两个重要设计原则),那么您必须让用户配置所需的相对时间或数据项。或者您也可以让用户在特定情况下浏览所有/旧数据(例如,使用特殊窗口,分页系统,特定界面或完全新的用例)。

让我们看两个例子。 (我假设用户正在使用最新数据查询服务器,而OLD是您用来引用服务器的dblink的名称,其中包含两周以上的数据。我还假设目标表名为DATATABLE,列为日期被称为DATADATE)。

要检索过去三个月(第一选择):

SELECT * FROM DATATABLE
UNION ALL
SELECT * FROM DATATABLE@OLD WHERE MONTHS_BETWEEN(SYSDATE, DATADATE) >= 3;

并且,要检索最后250行(第二选择):

SELECT * 
  FROM (SELECT * FROM DATATABLE ORDER BY DATADATE DESC) 
  WHERE ROWNUM <= 250;
UNION ALL
SELECT *
  FROM (SELECT * FROM DATATABLE@OLD ORDER BY DATADATE DESC)
  WHERE ROWNUM <= (250 - (SELECT COUNT(*) FROM DATATABLE));