Twistronics Blog

HSQLDB (3):SQL查询处理过程

March 21, 2016

1) QueryExpression、QuerySpecification 及 Statement 的结构分别是怎样的? SQL 语句是如何用这些结构表示的?

开始查看QueryExpression的构造过程 1

分析select语句的解析过程 2

可以看出,先用XreadSelect函数解析select关键字对应的内容,再进入XreadTableExpression函数中用XreadFromClause函数解析from、XreadWhereGroupHaving函数解析where

3

进入XreadSelect函数中,这里建立了一个新的QuerySpecification的中间结构,用XreadValueExpression读取值

4

将读取到的值插入到QuerySpecification的exprColumnList中,QuerySpecification中也存了一些其他信息,比如isDistinctSelect、rangeVariableList来存取是否有distinct关键字与变量列表

5

遇到from或者into等其他关键字时,结束对select关键字对应值的读取

6

继续使用上一步解析select之后的QuerySpecification实例,完善from和where相关信息

7

QuerySpecification中的rangeVariableList用来存放解析from后的信息

8

queryCondition用来存放解析where后的布尔表达式信息

9

2) SQL 语句中的查询条件是如何转化为关系代数树的?

开始解析where信息

10

生成了ExpressionLogical构成的树结构 11

叶节点

12

3) 表的连结运算是如何运行的?条件选择运算是如何实现的?

13

开始进行条件判断

14

比较当前列值与条件值

15

判断相等条件

16

4) 查询处理中是怎样利用索引来加快查询速度的?

17

用AVL树进行检索

18

19

20