我们先看一下,一条 SQL 语句从客户端发起到服务端执行所经历的过程。
优化器是这个过程中的关键环节,它决定了如何更好地执行一条 SQL 语句。优化器中包含很多优化规则,比如子查询提升、条件优化、无用列裁剪、子链接转换等。各种优化规则会被不断反复迭代执行,直到没有可以应用的优化规则为止。
大多数讲查询优化的文章和书籍都会用关系代数进行建模和讨论,这是正统和学术的,但不利于理解。
本次直播,TDengine Database 研发工程师王小玉将从语法语义开始,以一段 SQL 语句为线索,抽丝剥茧讲解它的前世今生,让大家更加整体和直观地去理解分布式数据库查询优化的运行原理和机制。他还会结合时序数据库的查询需求,为大家深入讲解 TDengine 是如何设计查询优化模块的。
他将分享:
- SQL 的语法语义模块
- 常见的优化规则
- 时序数据库(Time-Series Database)的查询需求
- TDengine 如何设计优化器
- TDengine 查询优化的演进
下面这段 SQL 语句将陪着我们走完这趟查询优化之旅。大家也可以提前思考一下,应该如何来优化这段语句。
select f1.c2 from (
select c1 + 10 as nc, c2, c3 from t1 where c4 > 10
) f1
join (
select cc1, max(cc2) as m1, max(cc3) as m3 from t2 group by cc1
) f2 on f1.nc = f2.m1
where f1.c2 > 20 and f1.c3 in (select b from t3 where f1.c2 = t3.a)
王小玉,TDengine Database 研发工程师,从 2013 年开始从事分布式数据库的内核开发工作,对于分布式数据库内核实现与优化,特别是查询优化方面有着相当丰富的经验。目前在涛思数据从事 TDengine 内核查询功能的相关研发工作。
点击这里,查看回放链接