优化查询的方法是什么

What is the approach to optimizing a query

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

我对 SQL 还很陌生,所以从未听说过空间 SQL,也从未见过实际查询中使用的交叉连接。我想知道是否有 "no need to reinvent the wheel" 方法来优化查询。比如"first thing most people do is view the execution plan and find what has the highest cost, then start there",或者"you always remove the distinct first",等等

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

1) 正如您所说,查看查询计划并查看时间花在了哪些地方。 Table 扫描是应该发出警报的第一件事

2) 检查您在 WHEREing 和 JOINin 上的列是否已编入索引,并且在执行 WHERE 或 JOIN 时没有在这些列上使用函数,因为它们会阻止索引应用

3) 还要检查你没有在 WHERE 和 JOIN 中进行隐式类型转换,它们将再次停止索引工作

4) 你在使用视图吗?高嵌套级别的视图可以阻止查询计划器完成其工作。尝试 "unrolling" 你的观点

5) 您是否在您的条件下使用 OR?手术室也可能花费很多。您可以尝试删除 OR 和 运行 多个查询并将它们联合起来

6) 尝试简化查询并使用临时表(或变量表)来保存子查询结果。如果您没有取得重大成果,它也可以加快速度。