【问题标题】:How do I organize my queries in Oracle?如何在 Oracle 中组织查询?
【发布时间】:2012-01-24 23:43:02
【问题描述】:

我做了一个基本查询(感谢 Justin Cave!)

现在我必须多次使用该查询并将其连接到不同的表和子查询,以检查我们的数据。将来可能会添加其他查询。因此,最终可能会对数据进行两打检查,结果将汇总在 SSRS 报告中。如果这是在 MSSQL 中,我会将查询结果放入临时表中,最后在临时表上运行选择。尽可能多地进行研究,我决定最好的方法是使用 WITH 子句并与其他临时表和查询连接以获得结果,然后将所有查询联合起来以获得我的结果。然而,这似乎会变得非常混乱和庞大。我会使用全局临时表,但它们在 Oracle 中似乎不受欢迎。也许您有更好的方法来模块化和组织它?

根据我们的许可协议,我们无法在 oracle 中添加新表(有人告诉我),但我们可以添加视图、存储过程和函数。

提前致谢!

【问题讨论】:

    标签: sql oracle oracle10g


    【解决方案1】:

    如果物化视图不被禁止使用,您可以使用它们来获得临时表的所有优点。

    但除非您需要在多个不同查询中获得子查询的结果,否则您可以在每个查询中使用任意数量的独立子查询,并像处理表一样对它们进行操作。大多数情况下,您会有相当不错的查询计划。

    另外,在我看来,使用全局临时表将分析速度提高 10 倍是值得的——只要您不将敏感数据暴露给不受信任的人。

    【讨论】:

    • 谢谢!以确保我理解正确。我可以使用一些物化视图创建我的主要查询,然后创建一堆将结果插入另一个物化视图的视图。然后选择后者的结果然后全部丢弃?
    • 是的,我认为这应该可行。如果您有昂贵的子查询需要在多个查询之间共享,您可以为这些子查询创建 m-views。
    【解决方案2】:

    将它们全部汇总到各种存储过程中,并将它们封装在 Oracle 包中。

    然后,您可以为应用程序的每个逻辑区域创建一个包。例如。 PKG_USERS、PKG_ACCOUNTS 等

    跟踪更改也更容易,因为您可以将这些置于版本控制之下,所有更改一目了然。

    它对我有用,希望它可以帮助你......

    【讨论】:

    • 您好杰弗里,感谢您的建议。我对包不是很熟悉,但它似乎是我正在寻找的。我会再研究一下。也许你可以告诉我,他们会尽量减少调用视图/存储过程的次数以使其尽可能高效吗?
    • SP/包可以包含代码,但数据不多。这如何取代临时表?此外,从查询中调用 SP 的成本相对较高,并且使用两个 ref 游标在 PL/SQL 代码中进行连接通常比在纯 SQL 中进行这种连接要慢。
    • 我可以澄清一下。存储过程并不慢,事实上恰恰相反。存储过程在 Oracle 中编译,因此速度更快,因为 RDBMS 知道它需要提前做什么来获取数据。不通过解释器进行解析将加速查询或操作。 (dba-oracle.com/art_ioug_proc.htm) (smart-soft.co.uk/Oracle/oracle-performance-tuning-part6.htm) (stackoverflow.com/questions/372401/…)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    相关资源
    最近更新 更多