【问题标题】:Improve performance of query with multiple joins使用多个连接提高查询的性能
【发布时间】:2019-02-09 02:49:45
【问题描述】:

我有一个包含四个连接的查询,这需要相当长的时间来执行。有没有办法优化查询?我尝试在联接中包含较小的 PORTFOLIO 表以尝试加快进程。

SELECT
    A.*
  , B.REPORTING_PERIOD
  , D.HPI AS CURRENT_HPI
  , E.USSWAP10
  , B.DLQ_STATUS AS CURRENT_STATUS
  , C.DLQ_STATUS AS NEXT_STATUS
FROM PORTFOLIO A
JOIN ALL_PERFORMANCE B ON
  A.AGENCY = B.AGENCY 
  AND A.LOAN_ID = B.LOAN_ID
JOIN ALL_PERFORMANCE C ON
  A.AGENCY = C.AGENCY
  AND A.LOAN_ID = C.LOAN_ID 
  AND DATEADD(MONTH, 1, B.REPORTING_PERIOD) = C.REPORTING_PERIOD
LEFT JOIN CASE_SHILLER D ON 
  A.GEO_CODE = D.GEO_CODE 
  AND B.REPORTING_PERIOD = D.AS_OF_DATE
LEFT JOIN SWAP_10Y E ON 
  B.REPORTING_PERIOD = E.AS_OF_DATE

【问题讨论】:

  • 查看你的表格一个控件,设置了哪些索引。
  • 欢迎来到 StackOverflow!一些信息将很有用:a) 数据库系统及其版本,b) 表定义,c) 数据示例。请阅读How to create a Minimal, Complete, and Verifiable example 以获得灵感。帮助社区为您提供帮助

标签: sql performance


【解决方案1】:

你可以索引你加入的列

【讨论】:

    【解决方案2】:

    确保您有用于提高性能的连接组合的索引。这些是您应该拥有的索引:

    • (PORTFOLIO.AGENCY、PORTFOLIO.LOAN_ID)上的索引
    • (ALL_PERFORMANCE.AGENCY,ALL_PERFORMANCE.LOAN_ID)上的索引

    • 关于 ALL_PERFORMANCE.REPORTING_PERIOD 的索引

    • 索引(ALL_PERFORMANCE.AGENCY、ALL_PERFORMANCE.LOAN_ID、ALL_PERFORMANCE.REPORTING_PERIOD)

    • 索引(CASE_SHILLER.GEO_CODE,CASE_SHILLER.AS_OF_DATE)

    • PORTFOLIO.GEO_CODE 索引
    • 关于 ALL_PERFORMANCE.REPORTING_PERIOD 的索引

    • SWAP_10Y.AS_OF_DATE 索引

    • ALL_PERFORMANCE.REPORTING_PERIOD 索引

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多