【发布时间】:2020-10-18 07:05:29
【问题描述】:
我有这个查询涉及 2 个连接的表。
Select q.id,
q.LastUpdatedTicksSinceEpoch,
q.[Type] [QuoteType],
q.LatestFormData [FormDataJson],
q.QuoteNumber,
q.QuoteState,
q.policyId,
p.CustomerId,
p.CustomerFullName,
p.CustomerAlternativeEmail,
p.CustomerHomePhone,
p.CustomerMobilePhone,
p.CustomerWorkPhone,
p.CustomerPreferredName,
p.ProductId
from Quotes q
INNER JOIN PolicyReadModels p on q.PolicyId=p.id
where
p.TenantId = @TenantId
and p.Environment = @Environment
and q.LastUpdatedTicksSinceEpoch > @LastUpdatedTicksSinceEpoch
and q.QuoteState <> 'Nascent'
and q.QuoteNumber is not null
and q.IsDiscarded = 0
ORDER BY q.LastUpdatedTicksSinceEpoch
当我运行它并获得执行计划时,我看到聚集索引扫描 - 我想消除它并使用索引搜索。
如何在此处消除聚集索引扫描?如何构建新的 INDEX?为了添加更多上下文,这将由 12 个并行线程(12 个连接)调用,所以我需要这个快速和优化。
这是我的查询和执行计划:
【问题讨论】:
-
为了对其他成员有用,您应该说明您认为此查询可以优化的原因以及您尝试过哪些没有奏效的原因,例如您实现了哪些索引?
-
对于报价表,只有PK。我将让这个查询在并行线程(12 个连接)中运行。
标签: sql sql-server database database-design