Sql 一个简单连接需要花费太长时间才能完成的问题

Sql 一个简单连接需要花费太长时间才能完成的问题,sql,sql-server,join,Sql,Sql Server,Join,我很难确定谁来修复这个简单的连接 SELECT A.CUSER, COUNT(*) AS QTD FROM BO_PRODUCTCONFIG A WITH (NOLOCK) INNER JOIN BO_PRICER001 B WITH (NOLOCK) ON ( A.CIDBRANCH = B.CIDBRANCH OR B.CIDBRANCH IS NULL )

我很难确定谁来修复这个简单的连接

SELECT A.CUSER,
       COUNT(*) AS QTD
FROM BO_PRODUCTCONFIG A WITH (NOLOCK)
    INNER JOIN BO_PRICER001 B WITH (NOLOCK)
        ON (
               A.CIDBRANCH = B.CIDBRANCH
               OR B.CIDBRANCH IS NULL
           )
           AND (
                A.CIDPRODUCT = B.CIDPRODUCT
                OR B.CIDPRODUCT IS NULL
           )
SELECT pc.CUSER,
       COUNT(*) AS QTD
FROM BO_PRODUCTCONFIG pc LEFT JOIN
     BO_PRICER001 prbp
     ON pc.CIDBRANCH = prbp.CIDBRANCH AND
        pc.CIDPRODUCT = prbp.CIDPRODUCT LEFT JOIN
     BO_PRICER001 prb
     ON pc.CIDBRANCH = prb.CIDBRANCH AND
        prbp.CIDPRODUCT IS NULL LEFT JOIN
     BO_PRICER001 prp
     ON prp.CIDBRANCH IS NULL AND
        prp.CIDPRODUCT = pc.CIDPRODUCT LEFT JOIN
     BO_PRICER001 pr
     ON prp.CIDBRANCH IS NULL AND
        prp.CIDPRODUCT IS NULL
WHERE prbp.CIDBRANCH is not null OR prb.CIDBRANCH is not null OR pr.CIDPRODUCT is not null or pr.<some other column> is not null;
我的问题是,在添加列B.CIDPRODUCT为NULL之后,这个查询需要几个小时才能完成

表BO_PRICER001第286537行 表BO_PRODUCTCONFIG行7934844

在BO_PRICER001表中,存在15329行,为null

如果B.CIDPRODUCT为空,则实时查询将显示此计划:

没有这一栏,计划是:

我已经尝试强制索引并切换到子查询,但问题仍然存在

如果可能的话,我真的很感谢你的帮助

PRICER001中的数据样本

CIDPRICE    CIDCOMPANY  CIDBRANCH   CIDTABLEPRICE   CIDCOMMISSIONGROUP  CIDPRODUCT  CIDPERIODPAYMENT    DENDDATEVALIDITY    DSTARTDATEVALIDITY  NINCREASEPERCENT    LACTIVE DLASTUPDATE NINCREASEPERCENTORIG
XPTO0319    XPTO    NULL    NULL    NULL    NULL    319 9999-12-31 00:00:00.000 2018-08-27 00:00:00.000 2.100   1   2020-10-07 05:07:37.917 21.000
XPTO0321    XPTO    NULL    NULL    NULL    NULL    321 9999-12-31 00:00:00.000 2014-08-06 00:00:00.000 2.100   1   2020-10-07 05:07:37.917 21.000
XPTO0326    XPTO    NULL    NULL    NULL    NULL    326 9999-12-31 00:00:00.000 2018-08-27 00:00:00.000 3.150   1   2020-10-07 05:07:37.917 31.500
XPTO0328    XPTO    NULL    NULL    NULL    NULL    328 9999-12-31 00:00:00.000 2014-08-06 00:00:00.000 3.150   1   2020-10-07 05:07:37.917 31.500
XPTO0345    XPTO    NULL    NULL    NULL    NULL    345 9999-12-31 00:00:00.000 2020-05-29 00:00:00.000 4.530   1   2020-10-07 05:07:37.917 45.300
XPTO0390    XPTO    NULL    NULL    NULL    NULL    390 9999-12-31 00:00:00.000 2020-05-29 00:00:00.000 9.130   1   2020-10-07 05:07:37.917 91.300
XPTO0412    XPTO    NULL    NULL    NULL    NULL    412 9999-12-31 00:00:00.000 2020-05-29 00:00:00.000 11.500  1   2020-10-07 05:07:37.917 115.000
XPTO0428    XPTO    NULL    NULL    NULL    NULL    428 9999-12-31 00:00:00.000 2020-05-29 00:00:00.000 2.640   1   2020-10-07 05:07:37.917 26.400
XPTO0460    XPTO    NULL    NULL    NULL    NULL    460 9999-12-31 00:00:00.000 2020-05-29 00:00:00.000 5.690   1   2020-10-07 05:07:37.917 56.900
XPTO0515    XPTO    NULL    NULL    NULL    NULL    515 9999-12-31 00:00:00.000 2020-05-29 00:00:00.000 13.900  1   2020-10-07 05:07:37.917 139.000

PRODUCTCONFIG中的数据示例

CIDPRODUCTCONFIG    CIDPRODUCT  CIDPRODUCTMARKET    CIDPRODUCTBUSINESS  CIDPRODUCTLINE  CIDPRODUCTGROUP CIDPRODUCTSUBGROUP  CIDREGION   CIDBRANCH   CIDTEAM CIDTERRITORY    LACTIVE LFLAG   DLASTUPDATE CUSER   CTPDCA
5840992036  584099  XPTO    XPTO    XPTO    ACM FFK NULL    1685    NULL    2036    1   NULL    2020-10-07 00:49:15.837 2036    1
5840992037  584099  XPTO    XPTO    XPTO    ACM FFK NULL    1685    NULL    2037    1   NULL    2020-10-07 00:49:15.837 2037    1
5840992038  584099  XPTO    XPTO    XPTO    ACM FFK NULL    1685    NULL    2038    1   NULL    2020-10-07 00:49:15.837 2038    1
5840992039  584099  XPTO    XPTO    XPTO    ACM FFK NULL    1685    NULL    2039    1   NULL    2020-10-07 00:49:15.837 2039    1
5840992040  584099  XPTO    XPTO    XPTO    ACM FFK NULL    1685    NULL    2040    1   NULL    2020-10-07 00:49:15.837 2040    1
5840992041  584099  XPTO    XPTO    XPTO    ACM FFK NULL    1685    NULL    2041    1   NULL    2020-10-07 00:49:15.837 2041    1
5840992042  584099  XPTO    XPTO    XPTO    ACM FFK NULL    1402    NULL    2042    1   NULL    2020-10-07 00:18:20.783 2042    1
5840992044  584099  XPTO    XPTO    XPTO    ACM FFK NULL    1685    NULL    2044    1   NULL    2020-10-07 00:49:15.837 2044    1
5840992045  584099  XPTO    XPTO    XPTO    ACM FFK NULL    1685    NULL    2045    1   NULL    2020-10-07 00:49:15.837 2045    1
5840992048  584099  XPTO    XPTO    XPTO    ACM FFK NULL    1686    NULL    2048    1   NULL    2020-10-07 00:50:20.223 2048    1


会降低性能。典型的解决方法是多个
左连接
。也许:

我很难确定谁来修复这个简单的连接

SELECT A.CUSER,
       COUNT(*) AS QTD
FROM BO_PRODUCTCONFIG A WITH (NOLOCK)
    INNER JOIN BO_PRICER001 B WITH (NOLOCK)
        ON (
               A.CIDBRANCH = B.CIDBRANCH
               OR B.CIDBRANCH IS NULL
           )
           AND (
                A.CIDPRODUCT = B.CIDPRODUCT
                OR B.CIDPRODUCT IS NULL
           )
SELECT pc.CUSER,
       COUNT(*) AS QTD
FROM BO_PRODUCTCONFIG pc LEFT JOIN
     BO_PRICER001 prbp
     ON pc.CIDBRANCH = prbp.CIDBRANCH AND
        pc.CIDPRODUCT = prbp.CIDPRODUCT LEFT JOIN
     BO_PRICER001 prb
     ON pc.CIDBRANCH = prb.CIDBRANCH AND
        prbp.CIDPRODUCT IS NULL LEFT JOIN
     BO_PRICER001 prp
     ON prp.CIDBRANCH IS NULL AND
        prp.CIDPRODUCT = pc.CIDPRODUCT LEFT JOIN
     BO_PRICER001 pr
     ON prp.CIDBRANCH IS NULL AND
        prp.CIDPRODUCT IS NULL
WHERE prbp.CIDBRANCH is not null OR prb.CIDBRANCH is not null OR pr.CIDPRODUCT is not null or pr.<some other column> is not null;
选择pc.CUSER,
将(*)计为QTD
从BO_PRODUCTCONFIG pc左连接
BO_价格001 prbp
在pc.CIDBRANCH=prbp.CIDBRANCH和
pc.CIDPRODUCT=prbp.CIDPRODUCT左连接
BO_价格001 prb
在pc.CIDBRANCH=prb.CIDBRANCH和
prbp.CIDPRODUCT为空左连接
BO_价格001 prp
在prp.CIDBRANCH上为NULL,并且
prp.CIDPRODUCT=pc.CIDPRODUCT左连接
博乌价格001 pr
在prp.CIDBRANCH上为NULL,并且
prp.CIDPRODUCT为空
其中prbp.CIDBRANCH不为空或prb.CIDBRANCH不为空或pr.CIDPRODUCT不为空或pr.不为空;

请提供示例数据、所需结果以及逻辑功能的说明。