查询优化:通过移除死子查询提升性能
1. 视图与查询修改
在构建应用程序时,视图能够提高抽象和模块化水平,但每次调用视图时的评估开销可能导致性能不佳。为解决此问题,在关系数据库中,调用视图的查询会通过查询修改进行优化。该技术将包含视图调用的查询与被调用视图的定义相结合,得到的查询不再引用视图,可通过重写规则在文本层面进行优化。这种技术有两个优点:一是避免了处理视图的性能开销;二是能够使用其他优化方法,如索引。
在 SBA 中,视图被视为一等(即存储在数据库中)的函数过程,可返回一个集合。视图可以由单个查询定义,也可以由一系列完成复杂算法的语句定义,可能带有局部环境。此外,视图还允许程序员从多个存储对象组合成一个虚拟对象。这些视图可以是递归的、有参数的,并且可以更新。SBA 中的视图概念支持相当通用的对象模型,包括类、方法、继承等。
假设视图定义在功能、语法和语义方面有一定规范,查询修改可简化为常规的宏替换。OQL 通过 “define” 子句采用了这种视图处理方式。目前,XML 数据库的查询语言和视图是广泛研究的主题,但在这方面尚未达成广泛共识。
在 SBQL 中,视图的定义示例如下:
view Freshmen
begin
return Student where year = 1
end;
像这样的函数可以在查询中调用,例如 “获取年龄大于 30 岁的新生的姓名和年龄” 的查询:
(Freshmen where age > 30).(name, age)
该查询的评估过程如下:
1. 在 E
移除死子查询优化查询性能
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



