select 子句中的 Oracle `partition_by`,它会永久创建这些分区吗?
Oracle `partition_by` in select clauses, does it create these partitions permantly?
我对 Oracle 中的分区只有粗浅的了解,但是,我知道您可以在 Oracle 上创建持久分区,例如在 create table
语句中,但是,当在其中使用 partition by
子句时select
声明? Oracle 是否会出于缓存原因或其他原因创建一个持久分区,或者该分区在某种意义上是“临时的”(例如,它将在会话、查询结束时或一段时间后删除……)?
例如,对于像
这样的查询
SELECT col1, first_value(col2)
over (partition by col3 order by col2 nulls last) as colx
FROM tbl
如果我执行那个查询,如果我明天或三个月后再次执行它,Oracle 会创建一个分区来加速执行吗?我很担心,因为我不知道如果我滥用该功能是否会导致内存耗尽。
partition by
用于查询(windows 函数)以使用 windows 函数获取聚合结果,该函数按 partition by
中提到的列分组.它的行为类似于 group by
,但能够为每一行提供分组结果,而无需实际对最终结果进行分组。
与table/index分区无关
这个 partition by
的范围只是这个查询,对 table 结构没有影响。
我对 Oracle 中的分区只有粗浅的了解,但是,我知道您可以在 Oracle 上创建持久分区,例如在 create table
语句中,但是,当在其中使用 partition by
子句时select
声明? Oracle 是否会出于缓存原因或其他原因创建一个持久分区,或者该分区在某种意义上是“临时的”(例如,它将在会话、查询结束时或一段时间后删除……)?
例如,对于像
这样的查询SELECT col1, first_value(col2)
over (partition by col3 order by col2 nulls last) as colx
FROM tbl
如果我执行那个查询,如果我明天或三个月后再次执行它,Oracle 会创建一个分区来加速执行吗?我很担心,因为我不知道如果我滥用该功能是否会导致内存耗尽。
partition by
用于查询(windows 函数)以使用 windows 函数获取聚合结果,该函数按 partition by
中提到的列分组.它的行为类似于 group by
,但能够为每一行提供分组结果,而无需实际对最终结果进行分组。
与table/index分区无关
这个 partition by
的范围只是这个查询,对 table 结构没有影响。