我知道存储过程通过执行路径更有效(比应用程序中的内联 sql)。然而,当被按下时,我对原因不是很了解。
我想知道对此的技术推理(以稍后我可以向某人解释的方式)。
谁能帮我制定一个好的答案?
在尝试将下面这个问题的内容应用于我自己的情况时,如果可能的话,我对如何摆脱运算符 Hash Match (Inner Join) 感到有些困惑。
SQL Server 查询性能 - 消除对哈希匹配(内部联接)的需要
我注意到 10% 的成本,并想知道我是否可以减少它。请参阅下面的查询计划。
这项工作来自我今天必须调整的查询:
SELECT c.AccountCode, MIN(d.CustomerSID)
FROM Stage.Customer c
INNER JOIN Dimensions.Customer d ON c.Email = d.Email
OR (
c.HomePostCode = d.HomePostCode
AND c.StrSurname = d.strSurname
)
GROUP BY c.AccountCode
Run Code Online (Sandbox Code Playgroud)
添加这些索引后:
---------------------------------------------------------------------
-- Create the indexes
---------------------------------------------------------------------
CREATE NONCLUSTERED INDEX IDX_Stage_Customer_HOME_SURNAME_INCL
ON Stage.Customer(HomePostCode ,strSurname)
INCLUDE (AccountCode)
--WHERE HASEMAIL = 0
--WITH (ONLINE=ON, DROP_EXISTING = ON)
go
CREATE NONCLUSTERED INDEX IDX_Dimensions_Customer_HOME_SURNAME_INCL
ON Dimensions.Customer(HomePostCode ,strSurname)
INCLUDE (AccountCode,CustomerSID)
--WHERE HASEMAIL = …
Run Code Online (Sandbox Code Playgroud) performance index sql-server execution-plan sql-server-2014 query-performance