如果在创建视图的时没有显示指定算法,MySQL 会尽可能的使用合并算法。如果视图中包含 GROUP BY、DISTINCT、任何聚合函数、UNION、子查询等,只要无法在原表记录和视图记录中建立一一映射的场景中,MySQL 都会使用临时表算法来实现视图(当然这些规则可能随着 MySQL 的版本更新发生变化)。想要确定 MySQL 究竟使用何种算法,可以 EXPLAIN 一条针对视图的简单查询,如果 select_type为"DERIVED",则为临时表算法。
二、DBEL 对视图的实现
DBLE 对视图的实现主要分为两种情况,一种是可下推,另一种为不可下推。
可下推:DBLE 直接将视图相关 SQL 下推到后端 MySQL 执行,DBLE 端只保存视图相应元数据信息。
不可下推:DBLE 会在逻辑层面实现视图,然后当执行视图相应查询 SQL 的时候,在将相应查询 SQL 与视图 SQL 合并后执行,这里就相当于 MySQL 中的合并算法了。