一文掌握 Velox orderby 算子的排序算法

0 引言

排序是计算机科学中研究最深入的问题之一。高效排序算法的研究主要集中在缓存效率、减少分支预测错误、并行性和最坏情况模式等关键问题上,但主要限于对大型整数数组进行排序。数据库系统研究主要关注许多相同的问题,并且数据库系统具有一些最实用的排序用例:ORDER BY 和 WINDOW 等算子需要明确使用到排序。因此,拥有高效的排序实现以提供快速查询响应时间至关重要,尤其是对于分析 (OLAP) 数据管理系统而言。对关系数据进行排序比对整数数组进行排序更复杂,本文将详细介绍 Velox 的 OrderBy 算子的实现。

1 OrderBy 算子简介

在 Velox 里面以下的查询执行计划树里面包含 OrderBy 算子。

SELECT c_customer_sk, c_birth_country, c_birth_year
FROM customer
ORDER BY c_birth_country DESC,
         c_birth_year    ASC NULLS LAST;

在上面查询中,c_birth_country 按降序排列,如果 c_birth_country 相等,则按 c_birth_year 升序排序。通过指定 NULLS LAST,空值将被视为 c_birth_year 列中的最小值。和我们平常了解的排序算法不一样的地方是,除了 c_birth_country 和 c_birth_year 列需要排序,c_customer_sk 也得更着排序。在业界排序的列称为 key columns,而其他要输出的列称为 payload columns。

2 OrderBy 算子实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值