注意下面例子中,在第二个和第三个查询,WHERE子句是不同的,但是两个查询语句的结构是相同的。因此,RapidsDB重用第二个查询的计划来运行了第三个查询。
![](http://tiebapic.baidu.com/forum/w%3D580/sign=39002ccf2e600c33f079dec02a4d5134/c638d794a4c27d1e8078d41f5ed5ad6edcc43892.jpg?tbpicau=2024-07-14-05_b94fc4694abbdb76cbf1fe3181482a99)
![](http://tiebapic.baidu.com/forum/w%3D580/sign=72cd191ea5fe9925cb0c695804aa5ee4/7c014d950a7b020833103e3a27d9f2d3562cc813.jpg?tbpicau=2024-07-14-05_db228c6c8a2739d5243a8228bc54adf8)
我们再了解下RapidsDB的代码生成到底做了什么事情:相对于使用传统解释器的数据库执行模型,RapidsDB嵌入了编译器来生成高效机器代码,从而实现更底层的优化,这个过程不是常规的语法解释器可以实现的。在默认情况下,查询语句会首先被解释,再经过后台异步编译以便在以后的执行中使用。这种方法加速了长时间的复杂查询的执行时间,同时为以后的使用提供了高效的查询计划。
RapidsDB在首次处理某个查询语句时,会异步优化并编译查询以备后用。这带来了最小的开销,这与需要处理的数据量大小无关,而是与查询的复杂程度相关。
代码生成过程包括从查询中提取参数,然后将规范化的查询转换为系统定制的数据库中间表示方式。具有相同语法结构的后续请求就可以重用该计划,以便达到优化的效果。代码生成适用于所有数据操作语言(DML)查询。例如,RapidsDB在CREATE TABLE和ALTER TABLE语句期间生产代码。这些数据定义语言(DDL)产生的编译代码,就可减少类似DML查询的执行时间。
![](http://tiebapic.baidu.com/forum/w%3D580/sign=39002ccf2e600c33f079dec02a4d5134/c638d794a4c27d1e8078d41f5ed5ad6edcc43892.jpg?tbpicau=2024-07-14-05_b94fc4694abbdb76cbf1fe3181482a99)
![](http://tiebapic.baidu.com/forum/w%3D580/sign=72cd191ea5fe9925cb0c695804aa5ee4/7c014d950a7b020833103e3a27d9f2d3562cc813.jpg?tbpicau=2024-07-14-05_db228c6c8a2739d5243a8228bc54adf8)
我们再了解下RapidsDB的代码生成到底做了什么事情:相对于使用传统解释器的数据库执行模型,RapidsDB嵌入了编译器来生成高效机器代码,从而实现更底层的优化,这个过程不是常规的语法解释器可以实现的。在默认情况下,查询语句会首先被解释,再经过后台异步编译以便在以后的执行中使用。这种方法加速了长时间的复杂查询的执行时间,同时为以后的使用提供了高效的查询计划。
RapidsDB在首次处理某个查询语句时,会异步优化并编译查询以备后用。这带来了最小的开销,这与需要处理的数据量大小无关,而是与查询的复杂程度相关。
代码生成过程包括从查询中提取参数,然后将规范化的查询转换为系统定制的数据库中间表示方式。具有相同语法结构的后续请求就可以重用该计划,以便达到优化的效果。代码生成适用于所有数据操作语言(DML)查询。例如,RapidsDB在CREATE TABLE和ALTER TABLE语句期间生产代码。这些数据定义语言(DDL)产生的编译代码,就可减少类似DML查询的执行时间。