这是我参与[第五届青训营]笔记创作活动的第11天 本文主要想对课堂上学的一些内容进行总结整理。今天学习的是关系型数据的核心技术中的SQL引擎及其分析。
一、本堂课重点内容
- SQL引擎
二、详细知识点介绍
SQL引擎
Parser
解析器一般分为词法分析、语法分析、语义分析等步骤
一条sql
UPDATE account_table SET balance = balance - '小目标' WHERE name = '抖音'
进行词法分析
抓取关键字:UPDATE/SET/WHERE
表列名:account_table/balance/name
常量:'小目标/抖音'
运算符:'=/-'
结束符:';'
进行语法分析以及语义分析
检查表列是否存在,常量是否合法
Optimizer
优化器,一个查询有多种执行方案,优化器可以选择一个最好的方案。
优化器最开始是基于规则的优化(RBO Rule Base Optimizer)
对于条件进行规则上的检查和化简。根据规则去执行操作,如规则为连接最小表,在连接a、b、c三表时根据规则依次连接。
基于规则的Scan优化:扫描时依次根据唯一索引,普通索引进行扫描,最后才选择全表扫描。
基于代价的优化(CBO Cost Base Optimizer)
一个查询有多种执行方案,CBO会选择其中代价最低的方案去真正执行。
代价可以是时间长短,io,cpu,网络和内存的使用等。
在进行基于代价的查询时往往不仅仅要考虑单个查询的代价,还要考虑整体并发的查询的代价。
Executor
火山模型
函数栈层层进入调用,数据层层返回。每一个Operator调用Next操作,访问下层Opertor,获得下层Opertor返回的数据,经过计算将数据返回给上层。每个算子独立抽象实现,相互间没有耦合,逻辑结构简单,但每计算一条数据有多次函数调用开销,cpu效率不高。