这是我参与「第四届青训营 」笔记创作活动的的第1天 这是青训营课程资料一推荐的文章。
Access Path Selection in a Relational Database Management System
如果说选一篇在优化器框架上,被引用次数最多的文献,应该非这篇论文莫属了,这篇文章介绍了 System R 的优化器,其中关于 Join order enumeration,Selinger 可以说是开创了 dynamic programing based 的 bottom-up 的搜索空间算法的先河,直至今日,很多成熟的商业或开源数据库系统仍在沿用这套框架,比如Oracle / DB2 / PostgreSQL ...
大佬神级论文拜读:《关系型数据库管理系统的连接选择》
摘要部分
non-procedurally:非程序地→without reference to access paths 不参考访问路径
Access in a database without having any programming language knowledge refers to the term nonprocedural access. The nonprocedural access is generally used in developing applications for the specification of the requirements related to data in forms, batch processing programs and also in reports.
在SQL这样的高级查询和数据操作语言,请求不参考访问路径。该论文描述了IBM研发的R系统分别在简单和复杂查询中如何选择访问路径来作为给定所需数据的用户规范作为谓词的的布尔表达式。
介绍部分
R系统,用户不需要知道数组(tuple)存储位置也不需要知道哪条访问路径可用或应采用哪条连接顺序(join order)。 R系统优化器(optimizer)同时选取连接顺序与sql语句所有表的每一条访问路径,然后选择其中“总连接代价”最小的方式(minimize "total access cost")来表达语句。涉及数据操作(更新、删除) 后续的section23456分别讲述了不同部分:第二部分陈述了优化器在SQL语言处理中的位置,第三部分描述了在单个物理存储表可用的存储部分连接路径,第四部分讲了单个表查询的优化器计算公式,第五部分讨论了更为复杂的多个表连接cost,最后第六部分是网状连接。
一个SQL陈述式的运行
陈述式被分为四段处理,基于其起始部分和内容,这些阶段可以被分为任意时间间隔。 这四个阶段:处理与句法分析,processing&parsing,优化optimization,代码生成code generation,执行execution。句法分析就是字面意思,我们学习的SELECT...FROM...WHERE...就属于查询块。