Quantcast
Channel: InfoQ - 促进软件开发领域知识与创新的传播
Viewing all articles
Browse latest Browse all 1638

腾讯云高级工程师如何玩转PG查询处理与执行器算法

$
0
0

本文由 dbaplus 社群授权转载

一、导语

数据库查询处理(Query Processing)是数据库比较核心的技术,也是距离用户最近的子系统。数据库系统在除了实现事务的隔离界别外,还需要在SQL上做到一定程度的兼容,因为数据库本身就是在做查询处理,很多的内核模块工作都是为了支持这个功能。本文将简要介绍一下PostgreSQL的查询处理过程。

二、关系代数与SQL(结构化查询语言)

大家在学校学到的可能更多的是关系代数(Relational Algebra),它定义了一组在关系(Relation)上进行操作的操作符。关系代数的操作数是关系(即,数据库中的二维表),其结果也是关系。操作符包含如下几类:

  • 集合操作符:交,并,差;
  • 过滤/投影;
  • 连接;
  • 别名(alias);
  • 一些扩展的操作符,例如:分组,去重,Aggregate。

除了关系代数,还有一种描述二维关系表的操作方法:DataLog(Database Logic)。这种方式相对来说比较强大,关系代数的操作符都可以用它来表述,但是有些关系的操作是关系代数表示不了的,只能用DataLog来表述,比如:递归查询。

直接使用关系代数对数据库操作比较晦涩,难度比较高,因此,今天的商业数据库都实现了一种更高级的查询语言——SQL(Structured Query Language),在表达上更加简洁易懂,也更容易学习。

实际上,在数据库系统内部,SQL语句也是被转化成对应关系代数的操作符,然后再进行处理,只是这些工作对最终用户来说是不可见的。其实,关系型数据库直接的“本地语言”是关系代数,SQL语言只是人类与关系数据库进行交流的“更加便捷的”桥梁。


Viewing all articles
Browse latest Browse all 1638

Trending Articles