1
数据库结果缓存的概念
数据库结果缓存是一种通过在内存中存储查询结果或计算结果来优化数据库性能的技术,通过复用已缓存的结果来加速数据访问,避免重复计算,尤其适用于结果集不常变化且频繁被查询的场景。
结果缓存的示例如图所示:

示例SQL语句的含义为按性别统计身高大于180厘米的人数。执行该语句需要首先扫描表,从表中获取身高大于180厘米数据,再按性别聚类统计人数,最后将结果投影返回。从各个操作的用时来看,第一次执行这条语句,聚类计算的用时最长,占据了绝大部分执行时间。
当用户第二次执行这条语句,且语句中表中数据未发生变化的情况下,如果不采用结果缓存机制,第一次执行的聚类结果将随着语句结束而释放,第二次执行将重新计算聚类结果,但如果采用了结果缓存机制,无需重新计算聚类结果,直接使用第一次执行的聚类结果即可,避免了重复计算,提高了执行效率。
2
Qcubic结果缓存机制工作原理
Qcubic结果缓存机制是通过重复使用语句结果的方式实现的,在系统开启结果缓存的情况下,系统将申请一块专门用来存储语句计算结果和最终结果的内存,第一次执行该语句时,系统将执行结果存储到这块内存中。语句执行结束后,该内存不释放。
第二次执行时,系统将寻找语句匹配的结果缓存,如果匹配成功,则系统会在执行语句时直接使用结果缓存中的数据,执行结束后,结果缓存所在内存不释放,继续为后续重复执行使用。

3
Qcubic结果缓存支持类型
Qcubic支持缓存语句的中间运算结果和查询结果。Qcubic结果缓存适用于高频率重复查询、计算密集型查询(语句包含复杂聚合函数)和近只读数据(数据更新频率低)等场景。
4
与其他结果缓存机制的区别
Qcubic不仅支持查询语句结果集的缓存,还支持缓存语句中间的计算结果,如:聚类、哈希、排序等中间节点的计算结果。这使得Qcubic数据库的结果缓存机制相较于传统数据库结果缓存机制更加灵活。在以下几种场景有着更好的表现:
➡️查询结果集过大:如果语句的查询结果集过大,此时系统缓存整个查询结果集将占用较多内存。这时可以指定系统只缓存语句的中间结果,不缓存最终结果集,同样可以缩短执行时间,并且节省了系统内存。
➡️哈希表连接查询:对于多个表作连接查询,且使用哈希连接方式的情况下,只要有一个表的数据发生了变动,语句的查询结果集缓存将失效,系统将重新计算所有表上的哈希节点。由于Qcubic数据库支持缓存中间计算结果,所以系统只需重新计算数据发生变化的哈希节点,其他表上的哈希节点无需重新计算,提高了执行效率。
技术分享
作者卜凡龙,Qcubic内核研发工程师,从事多年数据库查询优化,具有各类数据库查询优化以及优化底层实现经验。
更多推荐






