【发布时间】:2021-12-24 19:07:21
【问题描述】:
您好,我在这里得到了一个简单的查询,但速度很慢,大约需要 40 秒才能取回数据,我尝试了不同的 SQL,但似乎仍然无法使其工作,任何建议都将不胜感激
select
count (Distinct s.ExternalCustomerID) as PlayerCount,
s.League as Extra
from Q_Net_Ml_SportsDetailsActivity_monthly s with (nolock)
where s.MerchantID = 584
and s.WagerCount > 0
and s.Year = 2021
group by League
计划: https://www.brentozar.com/pastetheplan/?id=HJ1bL0ivY
我试过这个:子查询
SELECT
COUNT(ExternalCustomerID) AS Playercount,
League AS extra
FROM (
SELECT DISTINCT
ExternalCustomerID,
League
FROM Q_Net_Ml_SportsDetailsActivity_monthly s with (nolock, INDEX(NCSI_Q_Net_Ml_SportsDetailsActivity_monthly))
Where s.MerchantID = 584
and s.WagerCount > 0
and s.Year = 2021
) dt
GROUP BY League
【问题讨论】:
-
NOLOCK不是一个更快的开关,它是一个不正确的结果开关,除非你真的知道你在做什么,否则不要使用它。请在您的查询中添加索引定义。猜测一下,您需要一个索引(MerchantID, Year, League, ExternalCustomerID) INCLUDE (WagerCount ),但很难确定 -
@HoneyBadger 我认为它们是:第一个查询返回不同
ExternalCustomerIDperLeague的计数,第二个查询首先组成不同对的列表,然后每个League的计数相同
标签: sql sql-server azure-sql-database sql-execution-plan