本文包含两部分内容:DBMS的逻辑架构和查询算法的实现基本思想。在DBMS逻辑架构中,介绍DBMS由哪几部分组成,每部分具备什么样的作用,DBMS在工作时的数据流向。在查询算法基本思想中,介绍SQL语言的实现逻辑以及优化的基本思想和思路。
DBMS的逻辑架构
一个DBMS系统由磁盘存储、内存、执行引擎、编译器、用户操作层等构成,对应也有负责的程序实现逻辑,支撑数据库功能的实现。例如磁盘存储对应存储管理器,内存对应缓冲区管理器,存储文件对应有文件和索引管理。
DBMS的逻辑架构如下图所示:
图DBMS逻辑架构
磁盘
存储管理器:磁盘中存储了具体的数据文件,其中存在聚簇、非聚簇、连续、非连续等文件组织方式
内存
缓冲区管理:一些索引、热数据可缓存在内存中,从而加快访问速度,一些数据处理逻辑中,中间结果也会存在内存中。一些计算逻辑,是先从磁盘加载到内存中,再在内存中完成实现逻辑。
数据库中具体的表、记录、键值等数据最终以文件存储在磁盘中,而索引记录了键值、记录的存储位置映射关系,还有一些指针记录了文件之间的连续关系。类似这样的功能,都DBMS索引/文件和记录管理器来实现。
执行引擎:需要与编译器配合,负责具体任务的执行与操作,得到结果并反馈给用户/应用。
编译器:将用户的SQL语言解析成具体的关系代数运算,并进行优化,生成有先后顺序的关系代数运算,形成关系代数运算计划,交由执行器去执行。
在DBMS系统中,编译器和执行器是核心中的核心,编译器和执行器直接决定了DBMS的性能。
用户
应用:用户有普通用户和数据库管理员(DBA)之分,普通用户一版会执行DML类的语句,例如数据的增删改查,数据库管理员(DBA)一般会执行DCL和DDL的语言;应用是指基于数据库的应用程序。
那么执行SQL语言的本质是什么呢?
当用户输入了SQL语句后,实际上是转换成了若干关系代数的运算,经过一系列关系代数运算,得到了最终的结果。而这一切的理论基础就是关系代数中的笛卡尔积。
2、查询优化的基本思想
当用户输入SQL语言,编译器在解析成各种关系代数运算。不同条件和环境中,同一种操作,存在不同的例行程序,需要选择正确的例行程序,才能保证性能最好。在复杂的关系代数运算中,如果一开始就做乘积运算,就会消耗计算资源,并带来时延,因此理想情况下,乘积运算应放在最后运算。
因此就存在查询优化,在查询优化中,可选择最佳的例行程序,选择最优的运算顺序,便于获得最好的运算性能。
查询性能优化的逻辑和思想如下:
1、获取数据库相关信息(定期统计)
2、选择相应操作的例行程序
3、依照相关信息进行代价估算,并选择代价最小的例行程序及确定相应的参数
4、形成查询计划:以基本的例行程序为基本步,确定这些执行程序的执行步骤。
DBMS按照上述逻辑进行查询优化,在数据库中三种操作中,又有不同的算法来实现查询优化。
在一次单一元组的一元操作中,有迭代器算法,在整个关系的一元操作、整个关系的二元操作(集合上的操作、包上的操作、积,连接)有一趟、两趟、多趟扫描算法之分,这三者之间的区别,主要看得到最终结果需要的扫描次数,多趟扫描算法中的中间结果,常存储在内存中。一趟、两趟、多趟扫描算法实现方式中又存在基于排序的算法、基于散列的算法、基于索引的算法。
转载请注明:http://www.0431gb208.com/sjszlfa/2204.html