我们的系统中有一个查询,它在使用的逻辑读取数量方面存在问题。查询运行得足够频繁(一天几次),但它本质上是报告(即收集数据,它不是事务性的)。
有几个人看了之后我们正在考虑几个不同的选择。
使用OPTION(FORCE ORDER)和一些MERGE JOIN提示让优化器更有效地处理数据(至少在已测试的数据上)。
使用临时表来分解查询,以便优化器不处理非常大的查询,从而允许它更有效地处理查询。
我们实际上没有选择进行主要架构更改或任何事情,调整查询是这个问题的一个重点。
查询提示选项的执行效果略好于其他选项,但此时两个选项在性能方面都是可以接受的。
所以问题是,你更喜欢哪一个?查询提示被视为有点危险,因为我们正在覆盖优化器等。临时表解决方案需要写出tempdb等。
过去,我们已经能够在较大的报告查询中使用临时表来获得较大的性能提升,但这通常适用于运行频率低于此查询的查询。
答案 0 :(得分:1)
如果您已经通过索引进行了优化并删除了非SARGABLE sql,那么我建议您选择临时表选项: