使用联接提示的SQL Server查询优化

时间:2012-11-14 15:49:07

标签: sql-server temp-tables query-hints join-hints

我们的系统中有一个查询,它在使用的逻辑读取数量方面存在问题。查询运行得足够频繁(一天几次),但它本质上是报告(即收集数据,它不是事务性的)。

有几个人看了之后我们正在考虑几个不同的选择。

  1. 使用OPTION(FORCE ORDER)和一些MERGE JOIN提示让优化器更有效地处理数据(至少在已测试的数据上)。

  2. 使用临时表来分解查询,以便优化器不处理非常大的查询,从而允许它更有效地处理查询。

  3. 我们实际上没有选择进行主要架构更改或任何事情,调整查询是这个问题的一个重点。

    查询提示选项的执行效果略好于其他选项,但此时两个选项在性能方面都是可以接受的。

    所以问题是,你更喜欢哪一个?查询提示被视为有点危险,因为我们正在覆盖优化器等。临时表解决方案需要写出tempdb等。

    过去,我们已经能够在较大的报告查询中使用临时表来获得较大的性能提升,但这通常适用于运行频率低于此查询的查询。

1 个答案:

答案 0 :(得分:1)

如果您已经通过索引进行了优化并删除了非SARGABLE sql,那么我建议您选择临时表选项:

  1. 临时表提供可重复的性能,前提是它们不会在大小增加和性能方面对tempdb施加过大压力 - 您需要监控这些
  2. 由于未来的其他表/索引更改,
  3. sql提示可能会停止生效
  4. 记得在完成后清理临时表。