启发式规则在逻辑优化阶段的应用--源自《数据库查询优化器的艺术》P42
逻辑优化阶段使用的启发式规则通常包括如下两类:
q 一定能带来优化效果的,主要包括:
? 优先做选择和投影(连接条件在查询树上下推)。
? 子查询的消除。
? 嵌套连接的消除。
? 外连接的消除。
? 连接的消除。
? 使用等价谓词重写对条件化简。
? 语义优化。
? 剪掉冗余操作(一些剪枝优化技术)、最小化查询块。
q 变换未必会带来性能的提高,需根据代价选择,重要包括:
? 分组的合并。
? 借用索引优化分组、排序、DISTINCT等操作。
? 对视图的查询变为基于表的查询。
? 连接条件的下推。
? 分组的下推。
? 连接提取公共表达式。
? 谓词的上拉。
? 用连接取代集合操作。
? 用UNIONALL取代OR操作。
启发式规则在物理查询优化阶段的使用--源自《数据库查询优化器的艺术》P413
MySQL物理查询优化阶段使用的启发式规则如下:
两个关系连接的两种顺序中必然存在一个代价较小的:MySQL在构造内连接的时候,两个关系在连接前先排序,元组少的在前,MySQL认为这样的连接花费最小。
笛卡尔积操作具有较高代价,尽量不做笛卡儿积操作。