从1.1.1节的介绍可以看到,在数据库管理系统出现之前,人们对数据的操作是直接针对数据文件编写应用程序实现的,这种模式会产生很多问题。对于1.1.1小节中列举的学生基本信息管理和学生选课管理两个子系统,如果使用数据库技术来管理,其实现方式如图1-4所示。保证数据的安全是通过数据库管理系统的安全控制机制实现的,保证数据的可靠是通过数据库管理系统的备份和恢复机制实现的。......
2023-11-24
首先通过一个简单的例子来看一下查询优化的必要性。
设学生选课库的关系模式为
学生(学号,姓名,年龄,所在系);
选课(学号,课程号,成绩)。
求选修了C1号课程的学生姓名,用SQL语言表达如下:
SELECT学生,姓名
FROM学生,选课
WHERE学生.学号=选课.学号AND选课.课程号=’C1’;
假定学生选课库中有1000个学生记录,10000个选课记录,其中选修C1号课程的选课记录有50个。这个查询系统可以用多种等价的关系代数表达式来完成。
这里列出其中3种:
下面分析这3种查询的策略,看看策略的不同会对查询的时间效率产生怎样的影响。
1.第1种情况
(1)计算广义笛卡儿积
把学生和选课的每个元组连接起来。连接的做法一般是这样的:在内存中尽可能多地装入某个表(如学生表)的若干块元组,留出一块存放另一个表(如选课表)的元组。然后把选课中的每个元组和学生中的每个元组连接,连接后的元组装满一块后就写到中间文件上,再从选课中读入一块和内存中的学生元组连接,直到选课表处理完。这时再一次读入若干块学生元组,读入一块选课元组。重复上述处理过程,直到把学生表处理完。
设一个块能装10个学生元组或100个选课元组,在内存中存放5块学生元组和一块选课元组,则读取总块数为
(www.chuimin.cn)
其中读学生表100块。读选课表20遍,每遍100块。若读写20块/s,则总计要花105s。
连接后的元组数为103×104=107。设每块能装10个元组,则写出这些块要用5×104s。
(2)进行选择操作
依次读入连接后的元组,按照选择条件选取满足要求的记录。假定内存处理时间忽略,这一步读取中间文件花费的时间(同写中间文件一样)需5×104s。满足条件的元组假设仅50个,均可放在内存中。
(3)进行投影操作
把第(2)步的结果在姓名上做投影输出,得到最终结果。
因此,第1种情况下执行查询的总时间≈105+2×5×104≈105(s)。这里,所有内存处理时间忽略不计。
2.第2种情况
(1)计算自然连接花费的时间。执行自然连接仍需读取学生和选课表,因此读取块数仍为2100块,花费时间为105 s。自然连接的结果比广义笛卡儿积减少了很多,为104个,所以写出这些元组的时间为50s,仅为第1种情况的千分之一。
(2)执行选择运算花费时间。执行选择运算花费时间为50s。
(3)把第(2)步结果投影输出。第2种情况总的执行时间≈105+50+50≈205(s),比第1种情况大大减少。
3.第3种情况
(1)先对选课表作选择运算。只需读一遍选课表,存取100块花费时间为5 s,因为满足条件的元组仅50个,不必使用中间文件。
(2)读取学生表。把读入的学生元组和内存中的选课表进行连接。同样只需读一遍学生表(共100块)花费时间为5 s。
(3)把连接结果投影输出。第3种情况总的执行时间≈(5+5)s≈l0s,比第2种情况又减少了很多。
如果在选课表的课程号上建有索引,则第1步就不必读取所有的选课元组,而只需读取课程号=’C1’的那些元组(50个)。存取的索引块和选课表中满足条件的数据块总共3~4块。如果学生表在学号上也建有索引,则第2步也不必读取所有的学生元组,因为满足条件的选课记录只有50个,最多涉及50个学生记录,因此读取学生表的块数也可大大减少。总的存取时间将进一步减少到数秒。
有关数据库技术与应用教程的文章
从1.1.1节的介绍可以看到,在数据库管理系统出现之前,人们对数据的操作是直接针对数据文件编写应用程序实现的,这种模式会产生很多问题。对于1.1.1小节中列举的学生基本信息管理和学生选课管理两个子系统,如果使用数据库技术来管理,其实现方式如图1-4所示。保证数据的安全是通过数据库管理系统的安全控制机制实现的,保证数据的可靠是通过数据库管理系统的备份和恢复机制实现的。......
2023-11-24
如果要使用缺省参数创建一个学籍管理数据库StuData,可以使用如下命令:Create Database StuData如果希望为数据库或事务日志指定一个或者多个特定文件,增加一个On Primary子句,列出一个或者多个文件,并可为分配这个文件的空间指定一个可选值,其命令形式如下:Create Database StuDataOn Primary,;如果为了提高性能和可恢复性,则可以使用Log On子句来指定数据库的SQL Server事务日志将存储在一个与数据库对象不同的设备上,示例如下:Create Database StuDataOn Primary,Log On;GO......
2023-11-24
关键字Modify File用以表示按后面的文件说明,在指定的数据库中修改相应数据库文件。下面的语句可在学籍管理数据库增加一个新数据库文件,同时要修改原数据库文件StuFile l的最大文件尺寸为2000 MB。Alter Database StuDataAdd FileModify File又如,如果要删除学籍管理数据库文件StuFile2,则可使用如下命令:Alter Database StuDataRemove File StuFile2......
2023-11-24
虽然对视图的操作最终都转换为对基本表的操作,视图看起来似乎没什么用处,但实际上,如果合理地使用视图会带来许多好处。定义视图可以将表与表之间复杂的连接操作和搜索条件对用户隐藏起来,用户只需简单地查询一个视图即可。这在多次执行相同的数据查询操作时尤为有用。......
2023-11-24
SQL的数据查询语句中包括SELECT,FROM,WHERE,GROUP BY和ORDER BY子句。SELECT语句具有数据查询、统计、分组和排序的功能,其语句表达能力非常强大。查询操作需要的数据源指基本表组,表间用“,”分割。当SELECT子句后的目标列中有统计函数,如果查询语句中有分组子句,则统计为分组统计,否则为对整个结果集统计。交查询操作,操作结果为取<查询1>和<查询2>共有的元组。......
2023-11-24
由于信息结构复杂,应用环境多样,在相当长的一段时期内数据库设计主要采用手工试凑法。人们经过探索提出了各种数据库设计方法,这些方法运用软件工程的思想和方法,提出了各种设计准则和规程,都属于规范设计法。工具在很大程度上依靠开发人员的经验来保证数据库模型能生成可行的设计方案和高性能的数据库。大多数的数据库设计方法都需要经历这三个步骤。根据所选择的设计方法按部就班地进行并最终获得一个实用的应用系统。......
2023-11-24
下面介绍的优化策略能提高查询的效率,但它们不一定是最优的策略,实际上“优化”一词并不是很确切,用“改进”或“改善”或许更恰当些。即使这样,使用预处理方法执行连接的时间一般仍大大减少。当查询视图时,定义视图的表达式就是公共子表达式的情况。......
2023-11-24
相关推荐