繁体   English   中英

如何提高 SQL 内连接性能?

[英]How to improve SQL inner join performance?

如何提高这个查询性能第二个表 CustomerAccountBrand 内连接需要很长时间。 我添加了未使用的非聚集索引。 这是在能够连接之后拆分两个内部连接吗?。 请任何人帮助获取该数据。

SELECT DISTINCT 
    RA.AccountNumber, 
    RA.ShipTo,
    RA.SystemCode,
    CAB.BrandCode
FROM dbo.CustomerAccountRelatedAccounts RA  -- Views
INNER JOIN dbo.CustomerAccount CA
    ON RA.RelatedAccountNumber = CA.AccountNumber
    AND RA.RelatedShipTo = CA.ShipTo
    AND RA.RelatedSystemCode = CA.SystemCode 
INNER JOIN dbo.CustomerAccountBrand CAB   ---- Taking long time 4:30 mins
    ON  CA.AccountNumber = CAB.AccountNumber 
    AND CA.ShipTo = CAB.ShipTo 
    AND CA.SystemCode = CAB.SystemCode

ALTER VIEW [dbo].[CustomerAccountRelatedAccounts]
AS
SELECT        
    ca.AccountNumber, ca.ShipTo, ca.SystemCode, cafg.AccountNumber AS RelatedAccountNumber, cafg.ShipTo AS RelatedShipTo, 
    cafg.SystemCode AS RelatedSystemCode
FROM dbo.CustomerAccount AS ca 
    LEFT OUTER JOIN dbo.CustomerAccount AS cafg 
        ON ca.FinancialGroup = cafg.FinancialGroup 
            AND ca.NationalAccount = cafg.NationalAccount
            AND cafg.IsActive = 1
WHERE CA.IsActive = 1

根据我的经验,当查询变得更复杂时,SQL 服务器查询优化器通常无法选择正确的连接算法(例如,与您的视图连接意味着没有可随时连接的索引)。 如果这是这里发生的事情,那么简单的解决方法是添加一个连接提示以将其转换为散列连接:

SELECT DISTINCT 
    RA.AccountNumber, 
    RA.ShipTo,
    RA.SystemCode,
    CAB.BrandCode
FROM dbo.CustomerAccountRelatedAccounts RA  -- Views
INNER JOIN dbo.CustomerAccount CA
    ON RA.RelatedAccountNumber = CA.AccountNumber
    AND RA.RelatedShipTo = CA.ShipTo
    AND RA.RelatedSystemCode = CA.SystemCode 
INNER HASH JOIN dbo.CustomerAccountBrand CAB   ---- Note the "HASH" keyword
    ON  CA.AccountNumber = CAB.AccountNumber 
    AND CA.ShipTo = CAB.ShipTo 
    AND CA.SystemCode = CAB.SystemCode

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM