我有一个需要14分钟才能运行的查询。它在where子句中具有函数,交叉连接,不同排序和几何类型STIntercepts。
我对SQL很新,所以从未听说过空间SQL,也从未见过在实际查询中使用的交叉连接。我想知道是否有一个"没有必要重新发明轮子"优化查询的方法。喜欢"大多数人做的第一件事就是查看执行计划并找到成本最高的东西,然后从那里开始"或者#34;你总是删除不同的第一个"等等。
答案 0 :(得分:2)
这是一个非常广泛的问题,所以只是根据我的经验给你一些建议。
1)正如您所说,查看查询计划并查看花费的时间。表扫描是应该引发警报的第一件事
2)检查你所在的列和JOINin是否被编入索引,并且在执行WHERE或JOIN时你没有在这些列上使用函数,因为它们会阻止索引应用
3)同时检查你是不是在WHERE和JOIN中进行隐式类型转换,再次它们会使索引停止工作
4)你在使用观点吗?高嵌套级别的视图可以阻止查询计划程序执行其工作。尝试“展开”您的观点
5)你在条件下使用OR吗? OR也可能花费很多。您可以尝试删除OR并运行多个查询和UNION它们
6)尝试简化查询并使用临时表(或变量表)来保持子查询结果。如果你没有处理大的结果,它也可以加快速度。