您的位置:首页 > 博客中心 > 数据库 >

自己实现一个SQL解析引擎

时间:2022-03-14 02:10


图1.SQL引擎间模块的调用关系



图2. SQL例句相应的分析树

分析树的叶子节点为数字,字符串,属性等,其它为内部节点。
将图2的分析树转化为逻辑计划树,如图3所看到的。
gxlsystem.com,布布扣
图3. 图2分析树相应的逻辑计划

逻辑计划是关系代数的一种体现,关系代数拥有种基本运算符:投影 (π),选择 (σ),自然连接 (?),聚集运算(G)等算子。因此逻辑计划也拥有这些类型的节点。
逻辑计划的内部节点是算子,叶子节点是关系,子树是子表达式。各算子中最耗时的为连接运算,因此SQL查询优化的非常大一部分工作是减小连接的大小。如图3相应的逻辑计划可优化为图4所看到的的逻辑计划。
gxlsystem.com,布布扣
图4. 图3优化后的逻辑计划

完毕逻辑计划的优化后,在将逻辑计划转化为物理查询计划。图4的逻辑计划相应的物理查询计划例如以下:
gxlsystem.com,布布扣
图5. 图4相应的物理查询计划

物理查询计划针对逻辑计划中的每个算子拥有相应的1个或多个运算符,生成物理查询计划是基于不同的策略选择合适的运算符进行运算。当中,关系扫描运算符为叶子节点,其它运算符为内部节点。

后记

开源的数据库代码中能够下载OceanBase或者RedBaseOceanBase 是淘宝的开源数据库,RedBase是斯坦福大学数据库系统实现课程的一个开源项目。后面这两个项目都是较近開始的项目,代码量较少,结构较清晰,相对简单易读,在github上都能找到。可是OceanBase眼下SQL解析部分也没有所有完毕,仅仅有DML部分完毕;RedBase设计更简单,只是没有设计逻辑计划。
本文中就是參考了RedBase的方式进行解析。

參考文献:

《数据库系统实现》
《flex与bison》


欢迎光临--------。
假设阅读本文过程中有不论什么问题,请,转载请注明出处!

热门排行

今日推荐

热门手游