多个分区子查询的性能

纸浆

我有一个带有一个主表和多个历史/日志表的数据库,该数据库存储主表某些行的属性随时间的演变。这些属性未存储在主表本身上,但必须从相关的历史记录/日志表中查询。所有这些表都很大(以GB为单位)。

我想转储整个主表并加入所有历史记录/日志表的最后一个条目。

目前,我通过以下子查询来执行此操作:

WITH
  foo AS (
    SELECT
      ROW_NUMBER() OVER (PARTITION BY itemid ORDER BY date DESC) AS rownumber,
      ...
    FROM table1),
  bar AS (
    SELECT
      ROW_NUMBER() OVER (PARTITION BY itemid ORDER BY date DESC) AS rownumber,
      ...
    FROM table2)
SELECT
  ...
FROM maintable mt
JOIN foo foo ON foo.itemid = mt.itemid AND foo.rownumber = 1
JOIN bar bar ON foo.itemid = mt.itemid AND bar.rownumber = 1
WHERE ...

问题是这非常慢。是否有解决此问题的更快方法?

只允许我对此数据库执行只读查询:我无法对其进行任何更改。

萨扬(Sayan Malakshinov)

在实际的Oracle版本中,通常最好使用侧向/ CROSS APPLY,因为CBO(基于Oracle成本的优化器)可以转换它们(DCL-lateral view decorrelation转换),并根据您的情况/条件(表统计信息,基数等)使用最佳联接方法。 。

所以会是这样的:

SELECT
  ...
FROM maintable mt
CROSS APPLY (
      SELECT *
      FROM table1
      WHERE table1.itemid = mt.itemid
      ORDER BY date DESC
      fetch first 1 row only
      )
CROSS APPLY (
      SELECT *
      FROM table2
      WHERE table2.itemid = mt.itemid
      ORDER BY date DESC
      fetch first 1 row only
      )
WHERE ...

PS。您尚未指定oracle版本,所以我的答案是针对Oracle 12+

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Oracle子查询性能

来自分类Dev

子查询与联接性能

来自分类Dev

提高子查询的性能

来自分类Dev

SQL Server:如何提高WHERE子句中具有多个CTE和子查询的查询的性能

来自分类Dev

子查询性能与连接

来自分类Dev

子查询和联接的性能?

来自分类Dev

消除子查询以提高查询性能

来自分类Dev

SQL子查询性能需要提高

来自分类Dev

子查询与MAX汇总函数性能

来自分类Dev

性能调整-多个交换分区?(命令行)

来自分类Dev

性能调整-多个交换分区?(命令行)

来自分类Dev

MySQL和PHP多个查询的性能

来自分类Dev

MySQL和PHP的多个查询的性能

来自分类Dev

如何提高多个内连接的查询性能?

来自分类Dev

子查询返回多个值

来自分类Dev

子查询返回多个值?

来自分类Dev

子查询返回多个值

来自分类Dev

子查询返回多个记录

来自分类Dev

MySQL 子查询 IN 多个值

来自分类Dev

DynamoDB查询性能-唯一的分区键vs唯一的分区+排序键

来自分类Dev

DynamoDB查询性能-唯一的分区键vs唯一的分区+排序键

来自分类Dev

我的带有子查询的MYSQL查询的性能问题

来自分类Dev

优化查询/子查询以获得更好的性能(慢)

来自分类Dev

MySQL子查询还是多个查询?

来自分类Dev

Elastica-多个布尔查询-子查询

来自分类Dev

BigQuery将子查询应用于分区时间

来自分类Dev

配置单元:在子查询中添加分区列数据

来自分类Dev

替换Order By中的条件子查询(性能考虑)

来自分类Dev

子查询左联接的性能问题以找出最新日期