在单机数据库系统中进行优化。面临的问题,比如说给定一个要query的sql语句,查询优化算法的目标就是找到查询的一个具有最小执行花费的执行计划,如果找到了,那么这样的执行计划一定具有最快的响应时间。
查询语句可表示成一颗二叉树,其中叶子代表关系,内部结点是运算符,表示左右子树的连接关系,子树是sql片段或子表达式。根节点是最后运算的操作符。根节点运算之后,得到的是sql查询优化后的结果。这样一棵树就是查询路径。多个关系连接,连接顺序不同,可以得出多个类似的二叉树。
查询优化就是找出代价最小的二叉树,即最优的查询路径。
每条路径的生成,包括单表扫描,两表连接,多表连接顺序,多表连接搜索空间等技术。
思路一:逻辑优化,找出SQL语句等价的变换形式,使得sql执行更高效。优化操作依赖于表的一些属性信息(如索引和约束等)
- 子句局部优化:等价谓词重写,where和having条件化简
1、等价谓词重写
列举常见的等价谓词重写(like规则,between-and规则,in转换成or规则,NOT规则,or重写Union规则,这些规则的前提是要查询的字段建立索引;or转换any规则就是or谓词的any等价重写,以更好的利用min/max操作进行优化;all/any转换min/max规则,>any等价于min,<all等价于max;&