全,
希望获得关于Oracle设计决策的一些指导,我目前正试图评估:
问题
我在同一个oracle服务器上有三个不同的模式中的数据。我希望构建一个应用程序,该应用程序将显示来自所有三个模式的数据,但是所显示的数据将基于应用于全局数据的实时排序和优先级规则(即:基于应用的优先级权重,我可以从三个模式中的任何一个中提取数据)。
暂定解决方案
在DB中创建一个视图,该视图维护到三个模式中相关列的逻辑链接,编写一个接受参数化优先级权重的存储过程。应用程序随后调用存储过程从视图中选择“优先级”行,然后根据返回的行直接查询关联模式以获得其他数据。
我担心在执行的每个查询上数据被排序/排序的性能,但无法找到绕过这一问题的方法,因为优先级规则将经常更改。我们讨论的是每一个模式有2-3百万行的数据集。
是否有人对如何对数据提供聚合和排序视图有其他建议?
发布于 2009-06-18 15:33:21
从多个模式(甚至多数据库)查询并不是什么大事,即使在同一个查询中也是如此。只需在表名前面加上您感兴趣的模式,如
SELECT SOMETHING
FROM
SCHEMA1.SOME_TABLE ST1, SCHEMA2.SOME_TABLE ST2
WHERE ST1.PK_FIELD = ST2.PK_FIELD
如果表演成为问题,那就成了一个大话题.优化的查询计划、索引和数据库连接方法都可以发挥作用。想到的一件事是,如果它不必是实时的,那么您可以使用物化视图(又名“快照”)将数据缓存在一个地方。然后,您可以以合理的性能对此进行查询。
只需将快照设置为按适合您的需要的间隔刷新即可。
发布于 2009-08-19 22:32:57
实际上,数据来自3种模式并不重要。重要的是要知道数据变化的频率、标准更改的频率以及查询的频率。
如果有一组有限的标准(即,数据将以有限的方式查看),并且每隔几天就会改变一次,并且会被疯狂地查询,那么您可能应该查看物化视图。
如果条件几乎是无限的,那么创建物化视图是没有意义的,因为它们不太可能被重用。如果标准本身变化非常频繁,那么物化视图中的数据在这种情况下也不会有帮助。
另一个尚未回答的问题是源数据更新的频率,以及拥有最新信息的重要性。频繁更新的源日可能意味着物化视图会在一段时间内变得“陈旧”,或者您可能会花费大量时间来刷新物化视图,以保持数据“新鲜”。
老实说,只要有足够的硬件,2300万张记录对甲骨文来说就不算什么了。在尝试花哨(物化)视图之前,我可能会先对简单的动态查询进行基准测试。
发布于 2009-08-20 08:47:04
正如其他人所说的,在Oracle中查询几百万行并不是一个真正的问题,但这取决于您执行的频率--每十分之一秒可能会在db服务器上造成一些负载!
如果没有业务需求的更多细节和良好的数据模型,就很难提供良好的性能想法。它通常归结为想出一个理论,然后对你的数据库进行尝试,并访问如果它是“足够快”。
也值得你退后一步,问问自己,结果需要有多准确。该业务是否确实需要此查询的确切值,还是可以接受良好的估计值?
汤姆·凯特(问起汤姆的名声)在这些领域总是有一些有趣的想法(和实际事实)。本文描述了生成一个适当的动态搜索查询--但是Tom指出,当您查询Google时,它从不试图获得查询的确切点击次数--它会给您一个猜测。。如果您能够应用一个很好的估计,那么您就可以真正地提高查询性能的时间。
https://stackoverflow.com/questions/1013351
复制相似问题