如果要优化的 SQL 很长,我们可以将 SQL 拆分为三段,这样就能快速判断 SQL 在写法上是否容易产生性能问题。下面就是 SQL 三段拆分方法。

    1. select ....第一段.... from ....第二段.... where ....第三段....

    select 与 from 之间最好不要有标量子查询也不要有自定义函数。因为有标量子查询或者是自定义函数,会导致子查询或者函数中的表被反复扫描。

    from 与 where 之间要关注大表,因为大表很容易引起性能问题;同时要留意子查询和视图,如果有子查询或者视图,要单独运行看运行得快或是慢,如果运行慢需要单独优化;另外要注意子查询/视图是否可以谓词推入,是否会视图合并;最后还要留意表与表之间是内连接还是外连接,因为外连接会导致嵌套循环无法改驱动表

    where 后面需要特别注意子查询,要能判断各种子查询写法是否可以展开(unnest),同时也要注意 where 过滤条件,尽量不要在 where 过滤列上使用函数,这样会导致列不走索引

    在工作中,我们要养成利用 SQL 三段分拆方法的习惯,这样能大大提升 SQL 优化的速度。