https://15445.courses.cs.cmu.edu/fall2021/notes/02-advancedsql.pdf output control 控制输出结果,例如order,limit等 窗口函数 CTE Common Table Expressions,把一个语句的输出视为一张临时表参与下面的语句的运算 WITH cte1 (col1) AS (SELECT 1), cte2 (col2) AS (SELECT 2) SELECT * FROM cte1, cte2; Database Storage # 数据库的存储介质当前还是磁盘,IO慢 数据库存储要点之一是使用缓存维护数据在磁盘和内存之间的数据交换,以实现数据的快速读写 顺序读写和随机读写 顺序读写的意思是需要定位到读写的位置才能操作,例如链表。 随机读写的意思是可以直接定位到读写的位置,例如数组。 由于磁盘上随机读写速度不如顺序读写,所以当前数据库还是需要想办法使用顺序读写,例如LSM,GFS等架构都是因为这个原因导致的 磁盘和内存中数据的组织格式 # 数据全部在磁盘上,按page组织数据,内存中使用buffer pool维护缓存,磁盘中有一个page专门维护page的位置信息,使用的时候先读取此page到内存,然后 然后读取其他page到buffer pool,使用buffer pool维护page的置换情况,例如LRU,或者其他算法 可以参考lab1和slide,还是比较明显的 buffer pool中的page可以用于上层的数据运算 使用mmap可以完成类似的操作,但是实际上在使用中,如果在发生缺页中断的时候,mmap需要进行置换操作,所以会阻碍程序进程。且mmap是通用的组件,所以没有对数据库 的使用场景进行一些优化, You never want to use mmap in your DBMS if you need to write. The DBMS (almost) always wants to control things itself and can do a better job at it since it knows more about the data being accessed and the queries being processed. The operating system is not your friend. 最好是需要什么就自己实现什么, 数据组织形式 # 文件