相关疑难解决方法(0)

我如何阅读查询成本,它总是一个百分比吗?

我目前正在学习 SQL 70-433(Microsoft 认证考试),我对“查询成本”性能指标感到非常困惑。

根据我可以通过谷歌找到的任何文档,查询成本是一个百分比数字,代表整个批次的任何一部分所占的百分比。这对我来说似乎有点奇怪,因为我对特定查询的绝对优点感兴趣,而不是它相对于碰巧出现在它旁边的其他查询的优点。

但后来我想,好吧,也许你期望做的是并排放置两个替代查询,将它们作为“一批”运行,然后成本低于 50% 的那个就是赢家。

但微软 SQL 70-433 培训工具包的第 6 章第一课中对查询成本的讨论似乎与此无关。

这是一个示例:它们显示一个包含两个相关子查询的查询,然后通过用 OUTER APPLY 替换子查询来改进它。结果:“这个查询的成本大约是 76,而第一个查询的成本是它的两倍,大约 151。” 然后他们进一步改进了查询,并将成本从 76 降低到 3.6。它们并不暗示这些数字是百分比,而是暗示它们是与作为独立对象的查询相关的绝对数字,而不参考任何其他查询。无论如何,第一个查询的成本怎么会是 151%?

在本章的后面,他们展示了一个执行计划的屏幕截图,它包含三个部分。第一个说“成本:0%”,第二个说“成本:1%”,最后一个说“成本:99%”但是截图下面的文字(书本身)“这个查询的成本是0.56” . 我猜他们意味着其他类型的成本,但我在其他地方找不到它的参考。

有人可以帮忙吗?我彻底糊涂了。

sql-server ssms

38
推荐指数
1
解决办法
3万
查看次数

通过删除运算符哈希匹配内连接来提高查询性能

在尝试将下面这个问题的内容应用于我自己的情况时,如果可能的话,我对如何摆脱运算符 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

9
推荐指数
1
解决办法
5万
查看次数