存储优化 知识复习三
一、 选择题
1、 数据库领域的三位图灵奖得主是( )。
A、C.W.Bachman B、E.F.Codd C、Peter Naur D、James Gray
bash
【参考答案】ABD
2、 数据库DB、数据库系统DBS、数据库管理系统DBMS三者之间得关系是( )。
A、DBS包括DB与DBMSB B、DBMS包括DB与DBSC、
C、DB包括DBS与DBMSD D、DBS就就是DB,也就就是DBMS
bash
【参考答案】A
3、 索引的顺序和数据表的物理顺序相同的索引是( )。
A.聚集索引 B.非聚集索引 C.主键索引 D.唯一索引
bash
【参考答案】A
4、 主键的作用有( )。
A、保证实体的完整性 B、加快数据库的操作速度
C、创建唯一索引 D、确保主键值不重复
bash
【参考答案】ABCD
5、 维护数据库的完整性和一致性的方法有( )。
A、主键 B、check约束 C、外键 D、非空字段约束 E、触发器
bash
【参考答案】ABCDE
6、 事物的特征有( )。
A、原子性(Atomicity ) B、一致性( Consistency )
C、隔离性( Isolation ) D、持续性( Durability )
bash
【参考答案】ABCD
二、 判断题
1、视图是由基本表或其他视图导出的表,因此它对应实际存储的数据。
bash
【参考答案】错
2、delete table和drop table都可以完全删除一张表。
bash
【参考答案】错
3、唯一索引就是在唯一的一个属性列上建立的索引。
bash
【参考答案】错
4、主键就是唯一索引。
bash
【参考答案】错
5、主键primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键。
bash
【参考答案】对
6、任何一个表必须有主键。
bash
【参考答案】错
7、索引是一种能帮助数据库高效获取满足指定条件记录的辅助数据结构。
bash
【参考答案】对
8、索引是存储在内存中的一种数据结构。
bash
【参考答案】错
9、索引可以加快查询速度,因此我们要尽可能给每张表建立尽可能多的索引。
bash
【参考答案】错
10、数据库是存储在磁盘上的,DBMS是运行在内存中的。
bash
【参考答案】对
11、数据库的页中仅能存储一种类型的表或索引对象。
bash
【参考答案】对
12、存储过程是一个预编译的SQL语句集合,因此具有更快是执行速度。
bash
【参考答案】对
13、事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时得到与前一次不同的值,称为虚读。
bash
【参考答案】对
14、外键是一个用来建立两个表之间关系的约束,和另一张表的主键关联。
bash
【参考答案】对
三、 简答题
1、 简述主键和唯一索引的区别和联系。
bash
主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。
主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。
唯一性索引列允许空值,而主键列不允许为空值。
主键列在创建时,已经默认为空值 + 唯一索引了。
主键可以被其他表引用为外键,而唯一索引不能。
一个表最多只能创建一个主键,但可以创建多个唯一索引。
主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。
在 RBO 模式下,主键的执行计划优先级要高于唯一索引。两者可以提高查询的速度。
2、 试简述聚集索引和非聚集索引的不同及应用场景。
bash
聚集索引的表中记录的物理顺序与索引的排列顺序一致。
优点是查询速度快,因为一旦具有第一个索引值的记录被找到,具有连续索 引值的记录也一定物理的紧跟其后。
缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引 的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,降低了执行速度。在插入新记录时数据文件为了维持 B+Tree 的特性而频繁的 分裂调整,十分低效。
建议使用聚集索引的场合为:
A.某列包含了小数目的不同值。
B.排序和范围查找。 非聚集索引的记录的物理顺序和索引的顺序不一致。
其他方面的区别:
1.聚集索引和非聚集索引都采用了 B+树的结构,但非聚集索引的叶子层并 不与实际的数据页相重叠,而采用叶子层包含一个指向表中的记录在数据页中 的指针的方式。聚集索引的叶节点就是数据节点,而非聚集索引的叶节点仍然 是索引节点。
2.非聚集索引添加记录时,不会引起数据顺序的重组。
建议使用非聚集索引的场合为:
a.此列包含了大数目的不同值;
b.频繁更新的列
3、 试简述B树索引、B+树索引和哈希索引的不同及应用场景。
bash
1) B树每个节点都存储了key和data,B+树的data只存储在叶子节点上。
节点不存储data,就可以存储更多的key,使得树变矮,查询操作效率更高,执行的越快。
2) 树的所有叶子节点构成了一个有序列表,可以按照关键码的次序遍历全部记录。
由于数据顺序排列并相连,所以便于区间查找和搜索。而B树需要每一层的递归遍历。
哈希索引的绝对优势是在没有出现哈希碰撞时查询时间复杂度是O(1),查询速度非常快,但他有很多缺点;
不支持范围查询
不支持索引完成排序
B+树索引结构适用于绝大多数场景,像下面这种场景用哈希索引才更有优势:
在HEAP表中,如果存储的数据重复度很低(也就是说基数很大),对该列数据以等值查询为主,没有范围查询、没有排序的时候,特别适合采用哈希索引。
4、 试简述一条查询语句的执行过程。
bash
1)通过连接器查询当前执行者的角色是否有权限,进行查询。如果有的话,就继续往下走,如果没有的话,抱歉,哪怕是你貌美如花,也要拒绝掉,同时甩你一个 Access denied for user 的错误信息;
2)接下来就是分析器来分析语句了,嗯,你这个语句写的没啥问题,继续向下执行吧;
3)此时来到了优化器,优化器就想,这条执行语句,有执行方案;
4)等优化器决定选择哪个方案之后,执行器就去执行了。然后返回给客户端结果。