操作系统-数据库知识点查漏补缺二

简述数据库系统实现查询优化的步骤,在集中式数据库查询中查询代价主要考虑哪些开销?

1.将查询转化为某种内部表示,通常是语法树.

2.根据一定的等价变换规则把语法树转换成标准形式.

3.选择低层的操作算法.对于语法树中的每一个操作需要根据存取路径,数据的存储分布,存储数据的聚簇信息来选择具体的执行算法.

4.生成查询计划.查询计划也称为查询执行方案,是由一系列的内部操作组成的.

在集中式数据库中,查询执行开销主要包括磁盘存取块数(IO代价)、处理机时间(CPU代价)以及查询的内存开销。
进程调度中可抢占和非抢占两种方式,哪一种系统的开销更大?为什么?
可抢占式会引起系统的开销更大。
可抢占式调度是严格保证任何时刻,让具有最高优先数(权)的进程占有处理机运行,因此增加了处理机调度的时机,引起为退出处理机的进程保留现场,为占有处理机的进程恢复现场等时间(和空间)开销增大。
进程间相互通信的方式
# 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
# 有名管道 (named pipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
# 信号量( semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
# 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
# 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
# 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
# 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信
存储过程和视图的区别
1、存储过程是程序化的sql可以实现一般sql不能实现的功能。
如:先检索一个表得到一些数据,经过一定的编辑后更新到另外一个表中、这就可以用不带参数的存储过程实现。
2、视图是虚拟表,不存储数据,存储的是sql,检索他的时候实际上是执行定义它的sql语句
视图和存储过程比是没什么意义的
视图就是虚拟表,把视图和表比较还有点意思
视图不占实际空间,可以对任意的表进行叠加和剪裁,利用分区视图的功能,能加快表的I/O读取时间(需要2块以上硬盘)

视图只不过是存储在sql server上的select语句罢了,当对视图请求时,sql server会像执行一句普通的select语句那样的执行视图的select语句,它的性能并不像人们想象得那么出色。
而存储过程在编译后可以生成执行计划,这使得每次执行存储过程的时候效率将会更高,这是存储过程,另外台提交参数的时候,使用存储过程将会减少网络带宽流量,这是存储过程相对于普通的sql语句在性能上的最大的优势。
证明bcnf是3nf的子集
设 R 不是 3NF ,则必然存在这样的码 X ,属性组 Y 和非主属性 Z ( Z 不∈ Y ),使得 X→Y ( Y 不 ->X ), Y→Z ,这样 Y→Z 函数依赖的决定因素 Y 不包含候选键,这与 BCNF 范式的定义相矛盾,所以如果 R ∈ BCNF ,则 R 也是 3NF

操作系统-数据库知识点查漏补缺二

上一篇:用python将SQL格式文件改成自己想要的格式


下一篇:Install MongoDB on Windows