选择查询中条件连接的性能问题

Pat*_*yer 0 sql sql-server

现在,我正在使用此查询选择数据(简化):

SELECT person.*, pty.*
FROM PERSON person
     LEFT JOIN PARTNER partner 
     ON partner.FK_BPE_ISTC_ID = person.BSPE_ISTC_ID
     INNER JOIN PTY pty 
     ON pty.PTY_ISTC_ID = IIF(person.FORGN_ISTC_IND != 0, person.FORGN_ISTC_IND, partner.FRGN_ISTC_ID)
Run Code Online (Sandbox Code Playgroud)

问题是需要很长时间才能完成,并且执行计划如下所示:

执行计划

需要处理近 2000 万行(图片)才能最终得到 25000 行。

有没有更好的方法将 PTY 表与条件连接起来?

Pரத*_*ீப் 5

IIF条件中使用的函数ON将使查询不可控制

当这些列中的任何列上有索引时person.FORGN_ISTC_IND,下面的查询person.FORGN_ISTC_IND将执行得更好partner.FRGN_ISTC_ID

SELECT person.*,
       pty.*
FROM   PERSON person
       LEFT JOIN PARTNER partner
              ON partner.FK_BPE_ISTC_ID = person.BSPE_ISTC_ID
       INNER JOIN PTY pty
               ON ( person.FORGN_ISTC_IND != 0
                    AND pty.PTY_ISTC_ID = person.FORGN_ISTC_IND )
                   OR pty.PTY_ISTC_ID = partner.FRGN_ISTC_ID
Run Code Online (Sandbox Code Playgroud)