2015计算机三级数据库技术考前冲刺试题(4)
39数据库管理系统一般通过周期性检查【10】图来实现死锁检测。
参考解析:事务等待
【解析】事务等待图是一个有向图G=(T,u),T为结点的集合,每个结点表示正在运行的事务;U为边的集合,每条边表示事务等待的情况。若事务Tl等待事务T2,则Tl、T2之间有一条有向边,从T1指向T2。如果发现图中存在回路,则表示系统中出现了死锁。
一个事务执行过程中,其正在访问的数据被其他事务修改,导致处理结果不正确。这是由于不满足并发事务间的【11】性而引起的。
参考解析:隔离
【解析】当多个用户并发地存取数据时就会产生多个事务同时存取一个数据的情况,若对并发操作不加控制就可能会存取不正确的数据,破坏事务的一致性和数据库的一致性。并发操作带来的数据不一致性主要包括丢失修改、不可重复读和读“脏”数据,产生上述三类数据的不一致性主要原因就是并发操作破坏了事务的隔离性,所以数据库管理系统必须提供并发控制机制。
41在数据库系统出现系统故障后进行恢复时,对于事务T,如果在日志文件中有BEGIN TRANSACTION记录,也有COMMIT记录,但其对数据的修改没有写到数据库中,则数据库管理系统处理这种事务时应执行的操作是【12】。
参考解析:RED0
【解析】系统故障造成数据库不一致状态的原因有两个,一是未完成的事务对数据库的更新可能已写入数据库,二是已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库。对于故障发生前已提交的事务(既有BEGIN Transaction,又有commit)做red0操作,对于故障发生时尚未完成的事务(只有BEGINTransaction,而没有commit或rollback)做und0操作。
42设某并行数据库采用一台具有14个刀片的刀片服务器,每个刀片具有独立的内存和磁盘,各刀片之间通过刀片服务器上的以太网交换机实现通信,则该并行数据库采用的体系结构是【13】结构。
参考解析:无共享
【解析】并行数据服务器分为两种结构:完全共享资源结构、完全不共享资源结构。完全共享资源结构指对每个数据项的存取都要经过公共通信线路,其所有的处理器共享内存、磁盘等资源。完全不共享资源结构指高功能计算机系统由多个较小的系统替代,每个站点都要实现全局数据目录,每个站点有独立的内存和磁盘对应该站点的服务器。
43数据仓库是一个面向【14】的、集成的、非易失的、且随时间变化的数据集合。
参考解析:主题
【解析】数据仓库是为了构建新的分析处理环境而出现的一种数据存储和组织技术,基本特征包括:数据是面向主题的、集成的、非易失的、随时间不断变化的。主题是一个在较高层次上对数据的抽象,这使得面向主题的数据组织可以独立于数据的处理逻辑,因而可以在这种数据环境上方便地开发新的分析型应用。
44粒度是反映数据库系统中综合程度的指标。设有表T1(商品标识,销售时间,销售量)、T2(商品标识,日期,总销售量)和T3(商品类别,月份,总销售量),其中粒度最大的表是【15】。
参考解析:T3
【解析】粒度问题是设计数据仓库的一个最重要方面。粒度是指数据仓库的数据单位中保存数据的细化或综合程度的级别。细化程度越高,粒度级就越小;相反,细化程度越低,粒度级就越大。由题意可知,粒度最大的表应是T3。
三、设计与应用题
45在进行某学校教务管理系统的数据库设计时,数据库设计人员设计了如下几个关系模式:
系(系号,系名),系号为主码
学生(学号,姓名,所在系号),学号为主码
课程(课程号,课程名,开课系号),课程号为主码
选课(学号,课程号,选课时间),学号和课程号为主码
开发人员在将关系模式实施到SQL Server 2008的“教务”数据库时,使用了如下表结构定义语句:
CREATE TABLE系(
系号varchar(10)NOT NULL,
系名varchar(100)
)
CREATE TABLE学生(
学号varchar(50)NOT NULL,
姓名varchar(50),
所在系号varchar(10)
)
CREATE TABLE课程(
课程号varchar(50)NOT NULL,
课程名varchar(100),
开课系号varchar(10)
)
CREATE TABLE选课(
学号varchar(50)NOT NULL,
课程号varchar(50)NOT NULL,
选课时间datetime
)
在执行如下查询语句时发现执行效率很低:
SELECT *FROM选课JOIN学生0N学生.学号=选课.学号
JOIN系ON系.系号=学生.所在系号
JOIN课程0N课程.课程号=选课.课程号
WHERE系.系号=ˊ012 ˊ
AND convert(vvarchar(10),选课时间,120)>=ˊ2010-01-01ˊ
(1)在查找原因时发现建表语句有问题。请指出问题并说明该问题是否会影响此查询语句的执行效率。
(2)设已在“选课”表的“选课时间”列及“学生”表的“所在系号”列上建立了索引。请问这两个索引是否能够提高该查询语句的执行效率?如果不能,请说明原因。
参考解析:
(1)【解题思路】
本题中查询语句的功能是得到12系全体学生在2010年1月1日后的选课情况的汇总表。在每个数据表的定义时都必须严格定义表中的完整性约束条件,包括主键的设置,否则之后会出现主键有相同值的情况,破坏了数据的完整性。
【参考答案】
建表时没有设置主键,也没有说明外键,但不会影响此查询语句的执行效率。
(2)【解题思路】
“选课”表的“选课时问”列上建立了索引,从而能够提高执行效率。经常出现在Where子句中的字段,特别是大表的字段,应该建立索引。索引的作用就类似于书的目录,即会按照章节的顺序排列。因此如果在一本数百页的书里面查找某个章节位置的时候,就可以只扫描书的目录。扫描的范围缩了n倍,查询的效率自然就会提高。另外,在SQL Server内存够用的情况下,索引会被放到内存中,在内存中查找自然又会提高效率,所以必须合理利用索引。
【参考答案】
“选课”表的“选课时问”可以建立索引,从而提高了查询效率,而“学生”表的“所在系号”建立索引不会提高查询效率。索引的意义就是将记录按目标关键字顺序排列,这样查找某个目标关键字的对应值的位置就缩小了查找范围。“选课时间”的重复率低,所以可以作为索引,而学生“所在系号”的重复率太高,则不会提高查询效率。
46某采购中心采购了一套商品批发查询管理系统,此系统采用SQLServer 2008数据库管理系统,该系统需要经常处理百万级以上的数据查询。同时该系统提供了第三方人员开发的SQL接口,第三方人员可以根据自己的需要开发自己的应用程序来访问数据库中的相关数据。
(1)系统在使用的过程中,业务人员反应系统操作速度很慢。经过工程师检查测试后,数据库系统本身及网络传输过程中存在着一些问题,请给出针对数据库系统本身及网络传输过程中可能的一些调优方案。
(2)工程师在完成数据库系统本身和网络问题的优化后,发现第三方开发人员的SQL查询语句存在很多没有优化的问题,请从第三方开发人员角度给出一些优化方案。
参考解析:
【解题思路】
从数据库本身和网络传输的角度出发,数据库性能低下的因素一般有:I/O吞吐量小,形成了瓶颈效应;没有创建计算列导致查询不优化;SQL Server数据库内存不足;网络速度慢;查询出的数据量过大(可以采用多次查询或其他的方法降低数据量)以及锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)。
从SQL查询语句角度来考虑优化响应时间,应该从查询条件、临时表、游标、返回数据量、大事务操作等方面进行调优。
【参考答案】
(1)①把数据、日志、索引放到不同的I/O设备上,增加读取速度,数据量(尺寸)越大,提高I/O越重要。
②纵向、横向分割表,减少表的尺寸。
③升级硬件,扩大服务器的内存,Windows 2000和SQL Server 2000能支持4-8G的内存。配置虚拟内存,虚拟内存大小应基于计算机上并发运行的服务进行配置。增加服务器CPU个数。
④分布式分区视图可用于实现数据库服务器联合体。联合体是一组分开管理的服务器,但它们相互协作分担系统的处理负荷。这种通过分区数据形成数据库服务器联合体的机制能够扩大一组服务器,以支持大型的多层Web站点的处理需要。
⑤重建索引:DBCC REINDEX,DBCC INDEXDEFRAG;收缩数据和日志:DBCC SHRINKDB,DBCCSHRINKFILE。设置自动收缩日志,对于大的数据库不要设置数据库自动增长,它会降低服务器的性能。
⑥优化锁结构。
(2)①对查询进行优化,尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引。
②应尽量避免在where子句中使用!=或< >操作符,否则引擎将放弃使用索引而进行全表扫描。
③任何地方都不要使用select*from进行全表扫描,用具体的字段列代替“*”,不要返回冗余字段。
④避免频繁创建和删除临时表,以减少系统表资源的消耗。
⑤尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。
⑥尽量避免大事务操作,提高系统并发能力。
47设在SQL Server 2008某数据库中有商品表和销售表,两个表的定义如下:
CREATE TABLE商品表(
商品号char(10)PRIMARY KEY,
商品名varchar(40),
类别varchar(20),
进货单价int)
CREATE TABLE销售表(
商品号char(10),
销售时间datetime,
销售数量int,
销售单价int,
PRIMARY KEY(商品号,销售时问))
下面是一个用户定义的多语句表值函数,它接受类别作为输入参数,返回该类别下的每种商品在2012年的销售总利润,并将结果按照销售总利润的降序输出。请补全该函数定义代码。(10分)
CREATE FUNCTION f_Profit(@lb char(10))【1】@ProfitTable【2】(
商品号char(10),
总利润int)
AS
BEGIN
INSERT INTO@ProfitTable
【3】
【4】
END
参考解析:
【解题思路】
用户定义的多语句表值函数的命令格式为:
CREATE FUNCTION[schema_name.]function name
([{@parameter_name[AS][type_schema_name.]parameter_data_type
[=default]}
[….n]
]
)
RETURNS@return_variable TABLE
[WITH[[,]…n]]
[AS]
BEGIN
function_body
RETURN
END
[;]
::=
({
J}
[][,…n]
)
题目要求返回指定类别下的每种商品在2012年的销售总利润,并且将结果按照销售总利润的降序输出。采用复合SQL语句的格式,先查出指定类别的所有商品号:SELECT商品号FROM商品表WHERE类别=@lb,其中@lb为函数的传人参数,然后在销售表中用GROUP BY对商品号进行分组,并采用SUM计算每个分组的总和。
【参考答案】
第一空:RETURNS
第一空:table
第三空:SELECT a.商品号,SUM(销售数量*(销售单价一进货单价))AS总利润FROM销售表a JOIN商品表b ON a.商品号=b.商品号WHERE a.商品号IN(SELECT商品号FROM商品表WHERE类别=@lb)GROUP BY a.商品号0RDER BY总利润DESC
第四空:RETURN@ProfitTable