导语
SQL by pass的主要作用是针对某些简单的SQL生成的查询计划。如果查询计划是一个符合特定条件的查询计划,那么可以跳过原有迭代器模型的执行步骤,直接执行查询计划,将原有查询计划的初始化、执行、终结三个步骤集中到一个相邻的代码逻辑中执行,从而缩短了代码路径,使得热代码更加集中,最终能够加速查询计划的执行。
SQL by pass的核心原理
在传统关系数据库中,对于SQL处理一般分为三个阶段:
Ø 词法语法分析:主要是将用户的输入文本(SQL)转化成一个内部的数据结构,一般称之为语法解析树,并验证语法的正确性,最终得到一个表示SQL的语法解析树。
Ø 查询优化:将前一个阶段的语法解析树,进行基于规则以及基于物理代价的优化,生成一个最优的查询计划。
Ø 执行查询计划:将前一阶段生成的查询计划予以执行(一般采用迭代器的方式),将结果返回给用户。
为了加速SQL的处理,针对前两个阶段,一般使用类似query plan cache的方式,以避免对SQL进行重复的解析和生成查询计划,例如使用常见的PBE方式(prepare bind execute)。
对于第三个阶段,为了加速查询计划的执行,在很多数据库中采用了基于LLVM的JIT技术,这种主要是在典型的OLAP应用中,针对特定的逻辑生成固定的字节码,提高CPU的执行效率。而在我们面对的OLTP场景中,创新的使用了SQL by pass来提高查询计划的执行效率。