查询优化的核心思路就是用最少的资源把结果查出来。关系代数的优化规则在这方面还挺关键的,尤其是那套语法树的变换逻辑,说白了就是换个更省事的方式执行查询。嗯,实际系统里会先把 SQL 转成内部的语法树,再用一套规则折腾一遍,目的就是少读几次表、少走几次连接,响应快,数据库压力小。

查询优化的目标挺直接——让查询跑得更快。方法也不复杂,大致就是先生成个语法树,再用等价变换规则去优化。比如能提前执行的过滤条件,就别等到连接完再做,提前过滤能省不少事。

有一套不错的课件资源挺值得看看:关系代数语法树,讲得比较清楚,怎么从 SQL 映射成语法树,怎么一步步变换,流程比较清晰。

等价变换规则这块,也有个补充的文档:等价变换规则续。常用的像选择下推连接重排这些都在里面。用好了,像多表连接、子查询这种也能跑得飞快。

实战场景挺多,比如你要优化一个嵌套查询,或者 Access 里的图形查询器卡得要死,就可以参考这个课件:Access 数据库课件,讲了不少具体关系表达式的例子。

如果你是做后端的,或者写 PL/SQL 写得比较多,可以顺手看看这个:PL/SQL 算术表达式。逻辑上跟优化目标蛮贴的,能帮你理清查询表达式的构造。

,如果你平时写 SQL 写得多,又遇到慢查询,那这些资料能帮你快速定位问题,改法也比较实用。如果你是初学者,建议从关系代数语法树这篇开始,蛮容易上手的。