首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server选择低效的执行计划

SQL Server选择低效的执行计划
EN

Stack Overflow用户
提问于 2016-12-19 09:41:21
回答 0查看 626关注 0票数 1

我有一个查询,它在某些情况下使用“过于简化”的执行计划运行,实际上相当慢(3-5秒)。查询为:

代码语言:javascript
复制
SELECT DISTINCT Salesperson.*
FROM Salesperson
    INNER JOIN SalesOrder on Salesperson.Id = SalesOrder.SalespersonId
    INNER JOIN PrelimOrder on SalesOrder.Id = PrelimOrder.OrderId
    INNER JOIN PrelimOrderStatus on PrelimOrder.CurrentStatusId = PrelimOrderStatus.Id
    INNER JOIN PrelimOrderStatusType on PrelimOrderStatus.StatusTypeId = PrelimOrderStatusType.Id
WHERE 
    PrelimOrderStatusType.StatusTypeCode = 'Draft'
    AND Salesperson.EndDate IS NULL

慢速执行计划看起来像这样:

显而易见的是,实际的行数/执行数明显高于各自的估计值:

如果我删除了Salesperson.EndDate IS NULL子句,则会运行一个更快的并行执行计划:

如果我删除DISTINCT关键字,一个类似的执行计划也会运行得非常快。

据我所知,似乎优化器基于其不正确的估计决定查询的运行成本不高,因此不选择并行化计划。但我无论如何也弄不明白为什么它选择了不正确的计划。我已经检查了我的统计数据,它们都是应该的。我已经在SQL Server 2008到2016中进行了测试,结果完全相同。

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41214750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档