You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
2. Internal Sort: Avoiding and Speeding Comparisions
2.1 Comparision-Based Sorting versus Distrubtion Sort
传统的数据库排序都是由基于比较的排序算法实现的,比如快速排序或内部归并排序;而不是基于分布的排序算法,比如基数排序。然而,基于比较的排序一定会包含条件分支,这就导致了潜在的分支预测失败引发 CPU 的 stall。虽然现代 CPU 有着高效的分支预测硬件,但是数据库内排序的比较结果是不可预测的。这就让基于分布的排序算法有了吸引力。
虽然基于分布的排序算法有着更少的 CPU stall 和更少的 data cache 或 TLB miss,但暂未取代 DBMS 内基于比较的排序算法。原因如下:
现在处理器可以在一个时钟周期内执行多条指令,而一次 cache miss 可能会浪费几十个甚至上百个时钟周期。因此,使排序比较时的指令数量减少,不如减少 cache miss 的有效性更高。其中,减少代码尺寸相当重要,尤其是内层循环的比较操作。Key 的规范化使得原先复杂的比较操作的指令数量大大减少,直至能够完全放入 CPU cache。
Implementing_Sorting.pdf
虽然大部分人对内存排序算法和外存排序算法都比较熟悉,但商业数据库内实现的排序各有各的不同。本文旨在为研究者介绍 DBMS 中的一些实用但鲜为人知的排序技术。
为了保证商用数据库的实用性,排序算法必须在较易维护的同时,在不同的 workload 和操作条件下都保持有效性和鲁棒性。因为 DBMS 中可能用到排序的地方太多了:
ORDER BY
本文主要讨论查询处理中的排序,以及维护 B-Tree 索引的排序。这两种排序需要解决的问题基本覆盖了排序需要解决的全部问题。
本文聚焦三种排序:
本文假设数据库是一个关系型数据库,内存远不够装下所有数据。不考虑排序的 稳定性,因为任何排序算法都能够通过为 key 添加一个 rank 来使排序稳定。
The text was updated successfully, but these errors were encountered: