基于错误的估计优化使用索引查找的查询

时间:2019-07-17 14:14:51

标签: sql sql-server query-optimization

我要加入两个叫Zasilka和Kapitola的桌子。每个人都有一个聚集索引,而Kapitola也有一个非聚集索引,其中包含我要加入的列。

查询使用索引查找,因为它只希望返回1行。

两个表的统计信息都已更新。

我尝试禁用索引,然后使用合并联接,但必须首先对约40000行进行排序,这会占用大量资源。

索引列大多是有序的,但在某些情况下则没有。我只是尝试考虑什么是加入这些表并避免顺序或寻求的最佳策略。

而且我不知道为什么它不使用非聚簇索引来合并合并。

Exectuion plan

io statistics seek io statistics merge

1 个答案:

答案 0 :(得分:1)

我相信您正在误读展示计划中的信息。估计是子树的每次执行。它估计每次子树执行将返回1行,并且它将执行子树71,000次。 (估计不少于一个)。由于包含假设,它认为在查找时会找到一行(基于通常的客户行为来假设优化器)。实际上,您将获得大约46,000行。因此,在这种情况下,优化程序正在按预期工作。

将来,请发布查询文本,模式和整个计划形状。截取大部分计划形状的屏幕快照时,要做的比猜测更难。