首页 > 解决方案 > 有没有办法告诉我查询结束时 OPTION (FAST 1) 做了什么?

问题描述

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

我今天无法获得查询或执行计划,因为我所在的服务器不允许我从中复制数据。如果需要它们,我可以安排将它们发送,但需要一些时间,在早上。

你的评论会很有趣。

亲切的问候,

德里克。

标签: sql-server

解决方案


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

聚集索引->利弊

好处:如果实施得当,性能会得到提升

缺点:需要了解聚集/非聚集索引和存储影响

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

并且

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


推荐阅读