2015計算機三級數(shù)據(jù)庫技術(shù)考前沖刺試題(4)
39數(shù)據(jù)庫管理系統(tǒng)一般通過周期性檢查【10】圖來實現(xiàn)死鎖檢測。
參考解析:事務(wù)等待
【解析】事務(wù)等待圖是一個有向圖G=(T,u),T為結(jié)點的集合,每個結(jié)點表示正在運行的事務(wù);U為邊的集合,每條邊表示事務(wù)等待的情況。若事務(wù)Tl等待事務(wù)T2,則Tl、T2之間有一條有向邊,從T1指向T2。如果發(fā)現(xiàn)圖中存在回路,則表示系統(tǒng)中出現(xiàn)了死鎖。
一個事務(wù)執(zhí)行過程中,其正在訪問的數(shù)據(jù)被其他事務(wù)修改,導(dǎo)致處理結(jié)果不正確。這是由于不滿足并發(fā)事務(wù)間的【11】性而引起的。
參考解析:隔離
【解析】當多個用戶并發(fā)地存取數(shù)據(jù)時就會產(chǎn)生多個事務(wù)同時存取一個數(shù)據(jù)的情況,若對并發(fā)操作不加控制就可能會存取不正確的數(shù)據(jù),破壞事務(wù)的一致性和數(shù)據(jù)庫的一致性。并發(fā)操作帶來的數(shù)據(jù)不一致性主要包括丟失修改、不可重復(fù)讀和讀“臟”數(shù)據(jù),產(chǎn)生上述三類數(shù)據(jù)的不一致性主要原因就是并發(fā)操作破壞了事務(wù)的隔離性,所以數(shù)據(jù)庫管理系統(tǒng)必須提供并發(fā)控制機制。
41在數(shù)據(jù)庫系統(tǒng)出現(xiàn)系統(tǒng)故障后進行恢復(fù)時,對于事務(wù)T,如果在日志文件中有BEGIN TRANSACTION記錄,也有COMMIT記錄,但其對數(shù)據(jù)的修改沒有寫到數(shù)據(jù)庫中,則數(shù)據(jù)庫管理系統(tǒng)處理這種事務(wù)時應(yīng)執(zhí)行的操作是【12】。
參考解析:RED0
【解析】系統(tǒng)故障造成數(shù)據(jù)庫不一致狀態(tài)的原因有兩個,一是未完成的事務(wù)對數(shù)據(jù)庫的更新可能已寫入數(shù)據(jù)庫,二是已提交事務(wù)對數(shù)據(jù)庫的更新可能還留在緩沖區(qū)沒來得及寫入數(shù)據(jù)庫。對于故障發(fā)生前已提交的事務(wù)(既有BEGIN Transaction,又有commit)做red0操作,對于故障發(fā)生時尚未完成的事務(wù)(只有BEGINTransaction,而沒有commit或rollback)做und0操作。
42設(shè)某并行數(shù)據(jù)庫采用一臺具有14個刀片的刀片服務(wù)器,每個刀片具有獨立的內(nèi)存和磁盤,各刀片之間通過刀片服務(wù)器上的以太網(wǎng)交換機實現(xiàn)通信,則該并行數(shù)據(jù)庫采用的體系結(jié)構(gòu)是【13】結(jié)構(gòu)。
參考解析:無共享
【解析】并行數(shù)據(jù)服務(wù)器分為兩種結(jié)構(gòu):完全共享資源結(jié)構(gòu)、完全不共享資源結(jié)構(gòu)。完全共享資源結(jié)構(gòu)指對每個數(shù)據(jù)項的存取都要經(jīng)過公共通信線路,其所有的處理器共享內(nèi)存、磁盤等資源。完全不共享資源結(jié)構(gòu)指高功能計算機系統(tǒng)由多個較小的系統(tǒng)替代,每個站點都要實現(xiàn)全局數(shù)據(jù)目錄,每個站點有獨立的內(nèi)存和磁盤對應(yīng)該站點的服務(wù)器。
43數(shù)據(jù)倉庫是一個面向【14】的、集成的、非易失的、且隨時間變化的數(shù)據(jù)集合。
參考解析:主題
【解析】數(shù)據(jù)倉庫是為了構(gòu)建新的分析處理環(huán)境而出現(xiàn)的一種數(shù)據(jù)存儲和組織技術(shù),基本特征包括:數(shù)據(jù)是面向主題的、集成的、非易失的、隨時間不斷變化的。主題是一個在較高層次上對數(shù)據(jù)的抽象,這使得面向主題的數(shù)據(jù)組織可以獨立于數(shù)據(jù)的處理邏輯,因而可以在這種數(shù)據(jù)環(huán)境上方便地開發(fā)新的分析型應(yīng)用。
44粒度是反映數(shù)據(jù)庫系統(tǒng)中綜合程度的指標。設(shè)有表T1(商品標識,銷售時間,銷售量)、T2(商品標識,日期,總銷售量)和T3(商品類別,月份,總銷售量),其中粒度最大的表是【15】。
參考解析:T3
【解析】粒度問題是設(shè)計數(shù)據(jù)倉庫的一個最重要方面。粒度是指數(shù)據(jù)倉庫的數(shù)據(jù)單位中保存數(shù)據(jù)的細化或綜合程度的級別。細化程度越高,粒度級就越小;相反,細化程度越低,粒度級就越大。由題意可知,粒度最大的表應(yīng)是T3。
三、設(shè)計與應(yīng)用題
45在進行某學(xué)校教務(wù)管理系統(tǒng)的數(shù)據(jù)庫設(shè)計時,數(shù)據(jù)庫設(shè)計人員設(shè)計了如下幾個關(guān)系模式:
系(系號,系名),系號為主碼
學(xué)生(學(xué)號,姓名,所在系號),學(xué)號為主碼
課程(課程號,課程名,開課系號),課程號為主碼
選課(學(xué)號,課程號,選課時間),學(xué)號和課程號為主碼
開發(fā)人員在將關(guān)系模式實施到SQL Server 2008的“教務(wù)”數(shù)據(jù)庫時,使用了如下表結(jié)構(gòu)定義語句:
CREATE TABLE系(
系號varchar(10)NOT NULL,
系名varchar(100)
)
CREATE TABLE學(xué)生(
學(xué)號varchar(50)NOT NULL,
姓名varchar(50),
所在系號varchar(10)
)
CREATE TABLE課程(
課程號varchar(50)NOT NULL,
課程名varchar(100),
開課系號varchar(10)
)
CREATE TABLE選課(
學(xué)號varchar(50)NOT NULL,
課程號varchar(50)NOT NULL,
選課時間datetime
)
在執(zhí)行如下查詢語句時發(fā)現(xiàn)執(zhí)行效率很低:
SELECT *FROM選課JOIN學(xué)生0N學(xué)生.學(xué)號=選課.學(xué)號
JOIN系ON系.系號=學(xué)生.所在系號
JOIN課程0N課程.課程號=選課.課程號
WHERE系.系號=ˊ012 ˊ
AND convert(vvarchar(10),選課時間,120)>=ˊ2010-01-01ˊ
(1)在查找原因時發(fā)現(xiàn)建表語句有問題。請指出問題并說明該問題是否會影響此查詢語句的執(zhí)行效率。
(2)設(shè)已在“選課”表的“選課時間”列及“學(xué)生”表的“所在系號”列上建立了索引。請問這兩個索引是否能夠提高該查詢語句的執(zhí)行效率?如果不能,請說明原因。
參考解析:
(1)【解題思路】
本題中查詢語句的功能是得到12系全體學(xué)生在2010年1月1日后的選課情況的匯總表。在每個數(shù)據(jù)表的定義時都必須嚴格定義表中的完整性約束條件,包括主鍵的設(shè)置,否則之后會出現(xiàn)主鍵有相同值的情況,破壞了數(shù)據(jù)的完整性。
【參考答案】
建表時沒有設(shè)置主鍵,也沒有說明外鍵,但不會影響此查詢語句的執(zhí)行效率。
(2)【解題思路】
“選課”表的“選課時問”列上建立了索引,從而能夠提高執(zhí)行效率。經(jīng)常出現(xiàn)在Where子句中的字段,特別是大表的字段,應(yīng)該建立索引。索引的作用就類似于書的目錄,即會按照章節(jié)的順序排列。因此如果在一本數(shù)百頁的書里面查找某個章節(jié)位置的時候,就可以只掃描書的目錄。掃描的范圍縮了n倍,查詢的效率自然就會提高。另外,在SQL Server內(nèi)存夠用的情況下,索引會被放到內(nèi)存中,在內(nèi)存中查找自然又會提高效率,所以必須合理利用索引。
【參考答案】
“選課”表的“選課時問”可以建立索引,從而提高了查詢效率,而“學(xué)生”表的“所在系號”建立索引不會提高查詢效率。索引的意義就是將記錄按目標關(guān)鍵字順序排列,這樣查找某個目標關(guān)鍵字的對應(yīng)值的位置就縮小了查找范圍。“選課時間”的重復(fù)率低,所以可以作為索引,而學(xué)生“所在系號”的重復(fù)率太高,則不會提高查詢效率。
46某采購中心采購了一套商品批發(fā)查詢管理系統(tǒng),此系統(tǒng)采用SQLServer 2008數(shù)據(jù)庫管理系統(tǒng),該系統(tǒng)需要經(jīng)常處理百萬級以上的數(shù)據(jù)查詢。同時該系統(tǒng)提供了第三方人員開發(fā)的SQL接口,第三方人員可以根據(jù)自己的需要開發(fā)自己的應(yīng)用程序來訪問數(shù)據(jù)庫中的相關(guān)數(shù)據(jù)。
(1)系統(tǒng)在使用的過程中,業(yè)務(wù)人員反應(yīng)系統(tǒng)操作速度很慢。經(jīng)過工程師檢查測試后,數(shù)據(jù)庫系統(tǒng)本身及網(wǎng)絡(luò)傳輸過程中存在著一些問題,請給出針對數(shù)據(jù)庫系統(tǒng)本身及網(wǎng)絡(luò)傳輸過程中可能的一些調(diào)優(yōu)方案。
(2)工程師在完成數(shù)據(jù)庫系統(tǒng)本身和網(wǎng)絡(luò)問題的優(yōu)化后,發(fā)現(xiàn)第三方開發(fā)人員的SQL查詢語句存在很多沒有優(yōu)化的問題,請從第三方開發(fā)人員角度給出一些優(yōu)化方案。
參考解析:
【解題思路】
從數(shù)據(jù)庫本身和網(wǎng)絡(luò)傳輸?shù)慕嵌瘸霭l(fā),數(shù)據(jù)庫性能低下的因素一般有:I/O吞吐量小,形成了瓶頸效應(yīng);沒有創(chuàng)建計算列導(dǎo)致查詢不優(yōu)化;SQL Server數(shù)據(jù)庫內(nèi)存不足;網(wǎng)絡(luò)速度慢;查詢出的數(shù)據(jù)量過大(可以采用多次查詢或其他的方法降低數(shù)據(jù)量)以及鎖或者死鎖(這也是查詢慢最常見的問題,是程序設(shè)計的缺陷)。
從SQL查詢語句角度來考慮優(yōu)化響應(yīng)時間,應(yīng)該從查詢條件、臨時表、游標、返回數(shù)據(jù)量、大事務(wù)操作等方面進行調(diào)優(yōu)。
【參考答案】
(1)①把數(shù)據(jù)、日志、索引放到不同的I/O設(shè)備上,增加讀取速度,數(shù)據(jù)量(尺寸)越大,提高I/O越重要。
?、诳v向、橫向分割表,減少表的尺寸。
③升級硬件,擴大服務(wù)器的內(nèi)存,Windows 2000和SQL Server 2000能支持4-8G的內(nèi)存。配置虛擬內(nèi)存,虛擬內(nèi)存大小應(yīng)基于計算機上并發(fā)運行的服務(wù)進行配置。增加服務(wù)器CPU個數(shù)。
?、芊植际椒謪^(qū)視圖可用于實現(xiàn)數(shù)據(jù)庫服務(wù)器聯(lián)合體。聯(lián)合體是一組分開管理的服務(wù)器,但它們相互協(xié)作分擔(dān)系統(tǒng)的處理負荷。這種通過分區(qū)數(shù)據(jù)形成數(shù)據(jù)庫服務(wù)器聯(lián)合體的機制能夠擴大一組服務(wù)器,以支持大型的多層Web站點的處理需要。
?、葜亟ㄋ饕篋BCC REINDEX,DBCC INDEXDEFRAG;收縮數(shù)據(jù)和日志:DBCC SHRINKDB,DBCCSHRINKFILE。設(shè)置自動收縮日志,對于大的數(shù)據(jù)庫不要設(shè)置數(shù)據(jù)庫自動增長,它會降低服務(wù)器的性能。
?、迌?yōu)化鎖結(jié)構(gòu)。
(2)①對查詢進行優(yōu)化,盡量避免全表掃描,首先應(yīng)考慮在where及order by涉及的列上建立索引。
?、趹?yīng)盡量避免在where子句中使用!=或< >操作符,否則引擎將放棄使用索引而進行全表掃描。
?、廴魏蔚胤蕉疾灰褂胹elect*from進行全表掃描,用具體的字段列代替“*”,不要返回冗余字段。
?、鼙苊忸l繁創(chuàng)建和刪除臨時表,以減少系統(tǒng)表資源的消耗。
?、荼M量避免使用游標,因為游標的效率較差,如果游標操作的數(shù)據(jù)超過1萬行,那么就應(yīng)該考慮改寫。
?、薇M量避免大事務(wù)操作,提高系統(tǒng)并發(fā)能力。
47設(shè)在SQL Server 2008某數(shù)據(jù)庫中有商品表和銷售表,兩個表的定義如下:
CREATE TABLE商品表(
商品號char(10)PRIMARY KEY,
商品名varchar(40),
類別varchar(20),
進貨單價int)
CREATE TABLE銷售表(
商品號char(10),
銷售時間datetime,
銷售數(shù)量int,
銷售單價int,
PRIMARY KEY(商品號,銷售時問))
下面是一個用戶定義的多語句表值函數(shù),它接受類別作為輸入?yún)?shù),返回該類別下的每種商品在2012年的銷售總利潤,并將結(jié)果按照銷售總利潤的降序輸出。請補全該函數(shù)定義代碼。(10分)
CREATE FUNCTION f_Profit(@lb char(10))【1】@ProfitTable【2】(
商品號char(10),
總利潤int)
AS
BEGIN
INSERT INTO@ProfitTable
【3】
【4】
END
參考解析:
【解題思路】
用戶定義的多語句表值函數(shù)的命令格式為:
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年的銷售總利潤,并且將結(jié)果按照銷售總利潤的降序輸出。采用復(fù)合SQL語句的格式,先查出指定類別的所有商品號:SELECT商品號FROM商品表WHERE類別=@lb,其中@lb為函數(shù)的傳人參數(shù),然后在銷售表中用GROUP BY對商品號進行分組,并采用SUM計算每個分組的總和。
【參考答案】
第一空:RETURNS
第一空:table
第三空:SELECT a.商品號,SUM(銷售數(shù)量*(銷售單價一進貨單價))AS總利潤FROM銷售表a JOIN商品表b ON a.商品號=b.商品號WHERE a.商品號IN(SELECT商品號FROM商品表WHERE類別=@lb)GROUP BY a.商品號0RDER BY總利潤DESC
第四空:RETURN@ProfitTable