打算进行讨论。
我有一个结果表,它是由一个稍微复杂的查询(几个Joins和WHERE子句)生成的,随着我们的进行,我将在过程中多次操作/引用。
我唯一能想到的就是将查询结果存储在一个表中,并在过程结束时删除该表。这是可行的选择吗?有什么缺点?更好的选择?
在存储过程中创建和删除表几乎总是错误的解决方案。
首先,您刚刚将查询转换为数据库更改;由于多种原因,这是有问题的,但特别是特权升级。其次,DDL可能由于多种原因而失败,因此这种方法引入了危险,而这种危险在纯查询中不存在。第三,创建,填充和删除表会增加开销。
最佳解决方案:只需编写高效的SELECT语句。
以性能降序排列的替代解决方案:
您的问题提出了一种查询初始结果集,然后以编程方式对其进行处理的方案。我首先想到的是您应该尝试在纯SQL中执行此操作。Oracle具有广泛的功能库,尤其是分析功能库,您将对查询中可以执行的操作数量感到惊讶。但是,如果您真的需要以过程方式进行工作,则填充和操作数组是下一个最有效的方法。填充全局临时表非常昂贵,因为它需要写入磁盘和从磁盘读取数据。如果您受到会话内存的限制,或者需要在多个过程之间共享数据,则仅考虑GTT。
归档时间: |
|
查看次数: |
54 次 |
最近记录: |