我有许多非常大的查询,这些查询在小型数据库上可以正常工作,但是当数据量变大时,这些查询的性能就会变慢。它们的设计确实很糟糕,我们必须真正解决这个问题。这些查询具有大量的LEFT OUTER JOINS。我注意到,当LEFT OUTER JOINS的数量超过10个时,每次添加新的联接时,性能都会以对数速度变慢。如果在查询末尾放置OPTION(快速1),则结果几乎立即出现。当然,我不想首先使用它,它不会一直帮助您(如果这样做,那么每个查询都将拥有它),其次,我想知道如何更好地优化这些联接。当我在不设置OPTION的情况下运行查询时,执行计划会在我的LEFT OUTER JOINS上显示许多嵌套循环,显示出较高的百分比成本,但关闭该选项则不会。如何找出加快查询速度的方法,以便可以在查询中反映出来?
我现在无法获取查询,也无法执行执行计划,因为我所在的服务器不允许我从中复制数据。如果需要此服务,我可以安排将其发送出去,但是要花一些时间,早上。
您的评论很有趣。
亲切的问候,
德里克。
答案 0 :(得分:0)
您可以将列设置为主键,并且列将自动成为聚簇索引。
聚集索引->收益和缺点
好处:如果实施正确,性能会提高
缺点:需要了解群集/非群集索引及其存储含义
注意:varchar外键也可能导致性能下降。将基表更改为具有整数主键。
还有
我建议使用数据库分页(例如通过ROW_NUMBER函数)对结果集进行分区,并仅查询要显示的数据(在GridView中每页20行)。