【问题标题】:How to reduce execution time on query with right join?如何减少右连接查询的执行时间?
【发布时间】:2021-04-12 07:41:15
【问题描述】:

如果我没有太多数据,我的右连接查询可以正常工作。但是当我的表中有 500 行或更多行时,查询可能需要 5 分钟甚至更长时间。

如何减少或改进此查询的执行时间:

SELECT dlocation.USER_NAME,dtransaction.USER_NAME
FROM dlocation RIGHT JOIN dtransaction 
ON (dtransaction.locationid= dlocation.id) and (dtransaction.isinternational = 
dlocation.isinternational) and (dtransaction.USER_NAME= dlocation.USER_NAME)
WHERE dtransaction.typeId = 'Charge' and (dtransaction.USER_NAME is null or 
dlocation.USER_NAME is null)

【问题讨论】:

  • Oracle 还是 SQL Server?这是两种截然不同的数据库产品
  • @a_horse_with_no_name 我正在基于 Oracle 的 H2 数据库上运行查询...
  • H2 肯定不是“基于”Oracle,它是一个完全不同的数据库产品
  • @a_horse_with_no_name 抱歉,我确信它更像 Oracle。无论如何,我正在 H2 数据库上运行查询。

标签: h2


【解决方案1】:

可以通过添加以下索引来提高查询的性能:

create index ix1 on dtransaction (typeId, USER_NAME);

create index ix2 on dlocation (id, isinternational, USER_NAME);

【讨论】:

    【解决方案2】:

    您需要请求 H2 显示此类查询的执行计划。

    为此,您需要 EXPLAIN 命令 [http://h2database.com/html/commands.html#explain]。您只需将其添加到性能调查中的查询前面即可。

    由于这是一个连接,您需要确保执行计划中没有任何表扫描。在您的情况下,您可能需要添加索引。

    【讨论】:

      猜你喜欢
      • 2015-11-30
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      相关资源
      最近更新 更多