分布式中DBLE 是如何实现视图的

发布时间:2020-05-19 浏览次数:235

本文主要讲解 DBLE 是如何实现 MySQL 视图功能的,内容包括 MySQL 视图相关概念、MySQL 对视图的实现,以及 DBLE 对视图的实现。


一、MySQL 视图概念及 MySQL 中视图的实现

MySQL 5.0 版本开始引入视图。视图本身是一个虚拟表,不存放任何数据。在使用 SQL 语句访问视图的时候,它返回的数据是 MySQL 从其他表中生成的。

MySQL 中对于视图是如何实现的呢?

MySQL 中通过两种算法来实现视图功能,分别称为合并算法(MERGE)临时表算法(TEMPTABLE)

如下图所示(图片出自《高性能 MySQL》):

分布式中DBLE 是如何实现视图的-爱可生


合并算法就是将视图 SQL 和查询 SQL 合并,然后执行查询,可以看到如果我们通过视图来简化 SQL,其实在 MySQL 底层又给我们转换了过来。

临时表算法就是在执行查询的时候,定义的视图会先生成对应的临时表,然后服务器基于该临时表执行相应的查询。

那么 MySQL 究竟会使用哪种算法呢?

如果在创建视图时没有显示指定算法,MySQL 会尽可能的使用合并算法。如果视图中包含 GROUP BY、DISTINCT、任何聚合函数、UNION、子查询等,只要无法在原表记录和视图记录中建立一一映射的场景中,MySQL 都会使用临时表算法来实现视图(当然这些规则可能随着 MySQL 的版本更新发生变化)。想要确定 MySQL 究竟使用何种算法,可以 EXPLAIN 一条针对视图的简单查询,如果 select_type为"DERIVED",则为临时表算法。


二、DBEL 对视图的实现

DBLE 对视图的实现主要分为两种情况,一种是可下推,另一种为不可下推

  • 可下推:DBLE 直接将视图相关 SQL 下推到后端 MySQL 执行,DBLE 端只保存视图相应元数据信息。

  • 不可下推:DBLE 会在逻辑层面实现视图,然后当执行视图相应查询 SQL 的时候,在将相应查询 SQL 与视图 SQL 合并后执行,这里就相当于 MySQL 中的合并算法了。

那么可下推或不可下推的情况是如何判断的呢?

通过判断相应的逻辑 schema 是不是 nosharding(nosharding 表示 schema 中没有表配置)。如果是 nosharding 则可下推,否则不可下推。其实这里可以看出来,可下推的情况可能比较少出现。

DBLE 对视图的实现详情如下图所示:

分布式中DBLE 是如何实现视图的-爱可生



总结

本文主要讲解了 DBLE 是如何实现 MySQL 视图的,内容包括 MySQL 视图相关概念、MySQL 对视图的实现,以及 DBLE 对视图的实现,希望对大家理解 DBLE 的视图实现有所帮助。

上一篇: 教你如何使用 MongoDB 和 HATEOAS 创建 REST Web 服务

下一篇: 你可知?其实 Oracle 直方图自动统计算法存在这些缺陷

咨询客服 在线咨询
400-820-6580 免费电话