Sql server 优化查询的方法是什么

Sql server 优化查询的方法是什么,sql-server,tsql,query-optimization,Sql Server,Tsql,Query Optimization,我有一个需要14分钟才能运行的查询。它在where子句中具有函数、交叉连接、独特排序和几何体类型STIntercepts 我对SQL相当陌生,因此从未听说过SpatialSQL,也从未见过在实际查询中使用交叉连接。我想知道是否有一种“无需重新发明轮子”的方法来优化查询。比如“大多数人做的第一件事就是查看执行计划,找出成本最高的项目,然后从那里开始”,或者“你总是先删除不同的项目”,等等。这是一个非常广泛的问题,所以我想根据我的经验给你一些建议 1) 正如您所说的,查看查询计划并查看时间花费在哪里

我有一个需要14分钟才能运行的查询。它在where子句中具有函数、交叉连接、独特排序和几何体类型STIntercepts


我对SQL相当陌生,因此从未听说过SpatialSQL,也从未见过在实际查询中使用交叉连接。我想知道是否有一种“无需重新发明轮子”的方法来优化查询。比如“大多数人做的第一件事就是查看执行计划,找出成本最高的项目,然后从那里开始”,或者“你总是先删除不同的项目”,等等。

这是一个非常广泛的问题,所以我想根据我的经验给你一些建议

1) 正如您所说的,查看查询计划并查看时间花费在哪里。表格扫描是引起警报的第一件事

2) 检查要在其中进行索引和连接的列,以及在执行WHERE或JOIN操作时未在这些列上使用函数,因为它们会阻止索引的应用

3) 还要检查您没有在where和join中进行隐式类型转换,它们同样会停止索引的工作

4) 您正在使用视图吗?视图的高嵌套级别可能会停止查询计划器的工作。尝试“展开”您的视图

5) 您是否在您的情况下使用ORs?手术室也会花费很多。您可以尝试删除ORs并运行多个查询并合并它们


6) 尽量简化查询并使用临时表(或变量表)来保存子查询结果。如果你的工作没有取得很大的成果,那么它也可以加快速度。

这正是我想要的,只是一个关于如何开始的总体计划。谢谢大家!@BattlFrog I会将检查统计信息io输出添加到列表中。它通常给出问题所在的好主意(除非使用UDF)