将SQL查询转换为PL/SQL能否提高Oracle 12c中的性能?

将SQL查询转换为PL/SQL能否提高Oracle 12c中的性能?,sql,database,plsql,oracle12c,sql-tuning,Sql,Database,Plsql,Oracle12c,Sql Tuning,我得到了一个800行SQL查询,大约需要20个小时才能获取大约4亿条记录。 有13个表是按月分区的。 这些表在每个分区中的记录范围从10万到4亿。 这些表在主键上建立索引。 该查询使用许多内联视图和外部联接以及一些group by函数 DBA说我们不能添加更多的索引,因为这会降低性能,因为它是OLTP系统 我被要求将查询逻辑转换为pl/sql,然后以块的形式填充一个表,然后从该表中执行select* 我的最终结果应该是一个可以提供给我的应用程序的查询。 因此,即使在我使用pl/sql以块的形式填

我得到了一个800行SQL查询,大约需要20个小时才能获取大约4亿条记录。 有13个表是按月分区的。 这些表在每个分区中的记录范围从10万到4亿。 这些表在主键上建立索引。 该查询使用许多内联视图和外部联接以及一些group by函数

DBA说我们不能添加更多的索引,因为这会降低性能,因为它是OLTP系统

我被要求将查询逻辑转换为pl/sql,然后以块的形式填充一个表,然后从该表中执行select*

我的最终结果应该是一个可以提供给我的应用程序的查询。 因此,即使在我使用pl/sql以块的形式填充一个表之后,最终我还是需要从该表中获取数据作为查询

我的问题是,由于pl/sql需要选择和插入这两种语言,pl/sql有没有可能比sql更快

对于sql可以实现的任何结果,是否存在pl/sql更快的情况


如果给定的信息不够,我很乐意提供更多信息。

将其作为存储过程实现可能会更快,因为创建过程时SQL已经被解析和编译。然而,考虑到您描述的数据量,还不清楚这是否会产生重大影响。您所能做的就是试试看。

将其实现为存储过程可能会更快,因为在创建过程时,SQL已经被解析和编译了。然而,考虑到您描述的数据量,还不清楚这是否会产生重大影响。您所能做的就是试试看。

我认为您确实需要确定性能问题在哪里;在那里度过时间。例如(我已经看过很多次这样的例子),大部分时间可能是在获取4亿行到任何“客户机”上。在这种情况下,重新编写查询或将其作为PL/SQL不会有任何区别。
无论如何,一旦你能列举问题,你就有更好的机会得到正确的答案,而不是猜测…

我认为你真的需要确定性能问题在哪里;在那里度过时间。例如(我已经看过很多次这样的例子),大部分时间可能是在获取4亿行到任何“客户机”上。在这种情况下,重新编写查询或将其作为PL/SQL不会有任何区别。
无论如何,一旦你能列举问题,你就有更好的机会得到正确的答案,而不是猜测…

是的,有机会。基于集合的查询通常比定制代码要快,但肯定也有例外。智能货币基于800行的查询,使用“许多内联视图和外部联接以及一些分组函数”,编写得很糟糕。知情的重写可能会带来巨大的性能改进。使用PL/SQL填充临时表更合适。然而,实际上重写代码超出了本网站的范围。所以请不要问,除非你想支付咨询费;)是的,有机会。基于集合的查询通常比定制代码要快,但肯定也有例外。智能货币基于800行的查询,使用“许多内联视图和外部联接以及一些分组函数”,编写得很糟糕。知情的重写可能会带来巨大的性能改进。使用PL/SQL填充临时表更合适。然而,实际上重写代码超出了本网站的范围。所以请不要问,除非你想支付咨询费;)