我是一个新手,想了解 Oracle 中的查询优化和临时表。
我看到的 Oracle 临时表示例涉及 CREATE TABLE 和 INSERT INTO 语句。
CREATE PRIVATE TEMPORARY TABLE ora$ppt_temp1( id INT, description VARCHAR2(100) ) ON COMMIT DROP DEFINITION; INSERT INTO ora$ppt_temp1(id,description) VALUES(1,'Transaction-specific private temp table');
就我而言(IBM Maximo),我的查询是纯 SELECT 语句(视图等),因此我无法处理其他语句,如 CREATE TABLE 或 INSERT INTO。
但是我遇到了一篇关于 SQL 性能的博客,它描述了 PostgreSQL 中一些听起来很有用的相关功能:
PostgreSQL 12+ 自动实现(将输出分配到内存中)多次调用的 CTE。
对我未经训练的眼睛来说,自动物化的想法似乎很有吸引力。它可以帮助我避免多次运行 CTE(不必要地)。
有没有办法在 Oracle 中做这种事情?(避免需要 CREATE TABLE 和 INSERT INTO 语句)
子句中的
MATERIALIZE
提示就是这样做的。WITH
另一种方法是
INLINE
:在上面的示例中,即使没有
INLINE
提示,数据库也会选择后者。