查询优化器估计,当实际行数为2000时,连接的结果只有一行。这会导致数据集的后续连接的估计结果为一行,其中有些行高达30,000。SQL Server post-join rowcount低估
计数为1时,QO为许多连接选择循环连接/索引搜索策略,这些连接速度太慢。我通过将可能的加入策略与WITH OPTION (HASH JOIN, MERGE JOIN)
约束在一起解决了该问题,从而将总体执行时间从60+分钟提高到了12秒。不过,我认为QO由于行数不佳而仍然产生不太理想的计划。我不想手动指定连接顺序和详细信息 - 有太多的查询会影响它,因为它是值得的。
这是在Microsoft SQL Server 2000中,具有多个表选择的中等查询连接到主选择。
我认为QO可能高估了连接许多方面的基数,期望表之间的连接列具有较少的共同行。
在联接之前扫描索引的估计行数是准确的,它只是某些联接后的估计行数太低。
数据库中所有表的统计信息均为最新并自动刷新。
早期的不良联结之一是在所有人共有的信息通用的'人'表和大约5%的所有人属于的专业人员表之间。两个表(和连接列)中的聚集PK都是一个INT。数据库高度规范化。
我认为,问题的根源是坏的行数估计一定加入后,所以我的主要问题是:
- 我怎样才能解决QO的职位加入行数估计是多少?
- 有没有一种方法可以提示连接将会有很多行,而无需手动指定整个连接顺序?
你能更具体吗?你知道行数的提示吗?我有一个WITH OPTION(MERGE JOIN,HASH JOIN)提示,但我想要更精确的东西。 – 2008-09-18 15:05:33