关于查询引擎的一点随想

第二本书的主要内容的设计构想:
《查询优化,查询引擎设计与实现》
《查询处理(引擎)概念与技术》(理想的情况)
本书的主要内容:
由于现在的相关书籍对于查询引擎的所涉及到的理论基础均未有一个深入而系统的讨论。例如:我们在处理子链接的时候(将其转为semi-join或者anti-semi-join)的理论基础;(2)子查询的处理的理论基础;查询访问空间的优化理论,最优访问路径的寻优;查询计划的优化;统计信息的计算的理论基础。 相关索引的优化。
<各个基础性的论文>,例如: 查询优化的PD方法的的理论基础;统计信息的理论基础;
sublink处理的理解基础。join-order的选择的理论基础。
查询优化所涉及到的技术与发展方向:
(1)查询引擎架构方面的变化;
(2)in-memory系统的引入;
(3)新索引方式的引入;
(4)新优化理论的介绍;
(5)查询计划的设计方面的新特性;
(6)执行策略的变化;
(7)各种其他方面的优化策略;hash table中对于hash函数的设计对性能的影响;
,SIMD执行对于执行效率;JIT,LLVM;GPU架构的影响;
在相关的查询引擎的工程化中。执行引擎的相关实现。在工程化的过程中,我们主要讨论在查询引擎及执行引擎在工程化的过程中所涉及到相关工程化的问题。 例如:在执行引擎的实现过程中,我们对于各类join的在工程上的实现策略。及多线程化的执行引擎的问题。 JIT在查询引擎及执行引擎中的使用。
type 与domain的等价关系。
类型体系, domain及其在数据库中的实现机制。涉及到类型的检查以及类型的强制转换。
Codd E F. A Relational Mode for Large Shared Data banks 1970在该论文中 Codd 和 Pirotte证明了关系代数,安全的元祖关系演算,安全的元组关系演算是等价的。
当时由于内存的关系,在数据库的查询执行的实现过程中,我们是有了流水线的方式来执行。 但是随着现在系统能力的增强,我们也可以使用batch的方式,在每一次的处理中。
12条 codd的数据库设计原则:
(1)信息准则:每条信息都必须保证在磁盘中的某个表中的某个列上。
(2)确保访问原则;
(3)空值准则;系统应该提供NULL值得处理能力。
(4)基于关系模型的动态联机目录;无论是永恒数据还是系统中的元数据,都可以通过相应的接口来进行访问。
(5)全面的数据子语音准则。提供一套完备的数据库操作语音。
(6)视图的更新准则;
(7)高级的插入删除,修改等等操作。
(8)物理数据的独立性;
(9)逻辑数据的独立性;
(10)完整的独立性;
(11)分布独立性;
(12)无损害准则;
关系代数—》元组关系演算—》域关系演算—》关系代数。而这三种是等价的,这构成了数据库查询理论基础。
五个必要的运算:并,差,串接,投影,选择这个五个必要的演算。
多值依赖自能反应两个关系的无损连接情况。(两个表的连接操作)。
连接的依赖。join dependency. 关系模式中属性间连接语义的函数关系。 Rissanen 1978年引入。
代数优化:
将子查询和子连接进行公式化表示:
子查询: 投影(:选择:) 这样一个形式; 而子连接则是一个条件化的投影和条件化的选择。 即 子连接最后的输出结果不能够产生NULL,如果是产生NULL的话则对于整个查询优化的转换导致一个错误的结果,有可能在底层的查询条件其会产生某些NULL元组的存在。这样会导致在优化后的语义上的不等价关系的产生。
(满足一个什么样的条件放能够使的该子查询或者子链接能够进行上提操作??????)这个如果能够给出一个相对严格的数学定义,那就相当厉害了。
涉及到相关子查询,非相关子查询。对于子查询优化是否具有很高的性价比。或者在优化上的准则。
——————————————————
这里可以将这部分模块改成,做出一个基于规则描述的系统,类似于lex/yacc这样,来提供cost-estimation这样的。
这样讲将这部模块独立出来。其底层也可以兼容不同的存储引擎。
例如:matlab中所提供的公式一样。解析公式(script 方式)。
这样我们就可以方便的修改cost est公式。 但这带来一个问题,会是的查询执行时间变长。
——————————————————