有没有办法可以在查询结束时告诉我什么OPTION(FAST 1)?

时间:2019-04-02 11:07:49

标签: sql-server

我有许多非常大的查询,这些查询在小型数据库上可以正常工作,但是当数据量变大时,这些查询的性能就会变慢。它们的设计确实很糟糕,我们必须真正解决这个问题。这些查询具有大量的LEFT OUTER JOINS。我注意到,当LEFT OUTER JOINS的数量超过10个时,每次添加新的联接时,性能都会以对数速度变慢。如果在查询末尾放置OPTION(快速1),则结果几乎立即出现。当然,我不想首先使用它,它不会一直帮助您(如果这样做,那么每个查询都将拥有它),其次,我想知道如何更好地优化这些联接。当我在不设置OPTION的情况下运行查询时,执行计划会在我的LEFT OUTER JOINS上显示许多嵌套循环,显示出较高的百分比成本,但关闭该选项则不会。如何找出加快查询速度的方法,以便可以在查询中反映出来?

我现在无法获取查询,也无法执行执行计划,因为我所在的服务器不允许我从中复制数据。如果需要此服务,我可以安排将其发送出去,但是要花一些时间,早上。

您的评论很有趣。

亲切的问候,

德里克。

1 个答案:

答案 0 :(得分:0)

您可以将列设置为主键,并且列将自动成为聚簇索引。

聚集索引->收益和缺点

好处:如果实施正确,性能会提高

缺点:需要了解群集/非群集索引及其存储含义

注意:varchar外键也可能导致性能下降。将基表更改为具有整数主键。

还有

我建议使用数据库分页(例如通过ROW_NUMBER函数)对结果集进行分区,并仅查询要显示的数据(在GridView中每页20行)。