国产集中库SQL能力评测 – 视图
这里谈谈视图。视图其实就是一条查询 SQL 语句,用于显示一个或多个表或其他视图中的相关数据。视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表。视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器。与表不同,视图不会要求分配存储空间,视图中也不会包含实际的数据。视图只是定义了一个查询,视图中的数据是从基表中获取,这些数据在视图被引用时动态的生成。由于视图基于数据库中的其他对象,因此一个视图只需要占用数据字典中保存其定义的空间,而无需额外的存储空间。
1. 视图概述
1).视图作用
用户可以通过视图以不同形式来显示基表中的数据,视图的强大之处在于它能够根据不同用户的需要来对基表中的数据进行整理。视图常见的用途如下:
提供额外数据访问安全,通过对用户设置视图访问权限,约束用户访问指定的行或列。隐藏数据复杂性,例如视图可将由多个表组成的查询封装为新的数据集,屏蔽其内部复杂性。简化用户的SQL语句,复杂内部逻辑通过视图来封装。隔离应用与数据表,可让应用不受表定义变更的影响进而可封装基表数据展现,使得应用程序与数据库表在一定程度上独立。2).视图分类
简单视图能够被查询优化器较好地处理,但是复杂视图不能被查询优化器很好地处理。一些商业数据库,如Oracle,提供了一些视图的优化技术,如"复杂视图合并"、"物化视图查询重写"等。但从整体上看,复杂视图优化技术还有待继续提高。
图片
2. 视图优化
1).优化手段
视图合并对于存在复杂视图的查询,优化器可以有两种方式来优化查询。一是创建一个用于聚集视图合并结果集,并把这个结果集连接到基表中;另一个是展开视图连接两个基表并聚集这些连接。为了把视图查询合并到读取查询中,优化器将读取查询中所使用视图的名字替换为原始表名字,并把视图查询WHERE条件中的查询条件添加到读取查询的WHERE条件中去。需要强调的是该合并中是以读取查询为基准,即把视图查询中的对应查询条件合并到读取查询中去。如果在读取查询语句中存在大量可以缩减查询范围的查询条件,且将这些查询条件添加到视图中可以缩减整体的数据处理量。
条件推入在无法执行视图合并的情况下,将读取查询中的查询条件推入到视图查询中去。
视图重写视图重写就是将对视图的引用重写为对基本表的引用。视图重写后的SQL多被子查询进行进一步优化。
2).Oracle 视图优化
3. 国产库视图优化评测
1)整体情况
下面是针对上述测例,国产库的行为如何?先来看看整体结果
图片