2016計算機三級數據庫分析真題

學識都 人氣:3.22W

2016年上半年計算機考試已經過去了,本站小編第一時間爲大家分享的是本次計算機三級數據庫的考試真題,希望對大家有所幫助!

2016計算機三級數據庫分析真題

Q1:

設某全國性的運輸企業建立了大型OLTP系統,並在該系統之上建立了數據倉庫。OLTP系統和數據倉庫中有如下數據表:

運輸明細表(運輸單ID,發送站ID,終到站ID,貨物ID,貨物重量,運輸價格,發貨日期)

彙總表1(發送站ID,終到站ID,貨物ID,發貨日期,總重,總運價)

彙總表2(發送站ID,終到地區ID,貨物ID,發貨日期,總重,總運價)

彙總表3(發送站ID,終到站ID,貨物ID,發貨月份,總重,總運價)

彙總表4(發送地區ID,終到地區ID,貨物類別ID,發貨日期,總重,總運價)

該企業管理的貨運站約有100個,貨物約有500種共10類,各彙總表都建有主碼,且各表有合理的維護策略,在每次維護後數據能保持一致。設有視圖V,該視圖的訪問頻率很高,其查詢結果模式爲(發送地區ID,終到站ID,發貨月份,總重,總運價),該視圖現以彙總表1爲計算數據源。經監控發現,彙總表1的被訪問頻率過高,導致系統整體性能下降,而其它彙總表被訪問頻率較低。在不增加彙總表和索引的情況下,請給出一個改善系統服務性能的優化方案,並簡要說明理由。

A1:

由於彙總表1和視圖的模式訪問頻率都很高,而且視圖的數據源來自彙總表1,又因爲其他彙總表的訪問率較低,所以只需要將視圖的數據源綁定爲彙總表3,因爲彙總表3也可以滿足視圖的輸出模式。這樣不僅提升了彙總表3的數據訪問率,而且降低了彙總表1的數據訪問率,系統性能和服務性能得到了很大的優化。又因爲貨物約有500種,共10類,可以再建立一個視圖綁定數據源爲彙總表4,這樣就可以充分利用匯總表4的數據信息,從而可以進一步完善系統性能的優化。

Q2:

在進行某學校教務管理系統的數據庫設計時,數據庫設計人員設計瞭如下幾個關係模式:

系(系號,系名),系號爲主碼

學生(學號,姓名,所在系號),學號爲主碼

課程(課程號,課程名,開課系號),課程號爲主碼

選課(學號,課程號,選課時間),學號和課程號爲主碼(8分)

開發人員在將關係模式實施到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 學生 ON 學生.學號= 選課.學號

JOIN 系 ON 系.系號 = 學生.所在系號

JOIN 課程 ON 課程.課程號 = 選課.課程號

WHERE 系.系號=′012′

AND convert(varchar(10),選課時間,120)>= ′2010-01-01′

(1)在查找原因時發現建表語句有問題。請指出問題並說明該問題是否會影響此查詢語句的執行效率。(4分)

(2)設已在"選課"表的"選課時間"列及"學生"表的"所在系號"列上建立了索引。請問這兩個索引是否能夠提高該查詢語句的執行效率?如果不能,請說明原因。(4分)

A2:

(1) 【解題思路】

本題中查詢語句的功能是得到12系全體學生在2010年1月1日後的選課情況的彙總表。在每個數據表的定義時都必須嚴格定義表中的完整性約束條件,包括主鍵的設置,否則之後會出現主鍵有相同值的情況,破壞了數據的完整性。

【參考答案】

建表時沒有設置主鍵,也沒有說明外鍵。但不會影響此查詢語句的執行效率

(2)【解題思路】

建立索引是加快查詢速度的有效手段,用戶可以根據應用環境的需要建立一個或多個索引,以提供多種存取路徑,加快查找速度。索引就像書的目錄一樣爲我們將記錄按規定的列進行了排序,這樣當我們要訪問滿足這些列的某些條件的記錄時,索引會爲我們減少查詢數據庫中的地址範圍,大大節省了時間。所以根據WHERE條件後的字段對錶建立索引對於提高查詢效率是有幫助的。

【參考答案】

"選課"表的"選課時間"列上建立了索引,從而能夠提高執行效率。經常出現在Where子句中的字段,特別是大表的字段,應該建立索引。索引的作用就類似於書的目錄,即會按照章節的順序排列。因此如果在一本數百頁的書裏面查找某個章節位置的時候,就可以只掃描書的目錄。掃描的範圍縮了n倍,查詢的效率自然就會提高。另外,在SQLServer內存夠用的情況下,索引會被放到內存中,在內存中查找自然又會提高效率,所以必須合理利用索引。

Q3:

某商場商品經營管理系統使用SQL Server 2008數據庫管理系統,此係統上線運行1年後,業務人員使用某統計功能(此功能每月使用一次)時發現速度很慢。該統計功能主要執行的SQL語句如下:

SELECT 商品號,SUM(銷售數量*銷售價格) 銷售額

FROM 銷售明細

GROUP BY 商品號;

該銷售明細表的建表語句如下:

CREATE TABLE 銷售明細(

序列號 intIDENTITY(1,1) NOT NULL,

商品號 intNOT NULL,

銷售日期 datetime NULL,

銷售數量 intNOT NULL,

銷售價格 intNOT NULL

);

並在銷售明細表上建有如下索引:

CREATE index ix_銷售明細_商品號 on 銷售明細(商品號);

技術人員提出通過執行下述語句以提高此查詢的運行效率:

CREATE VIEW 商品銷售額視圖

WITH SCHEMABINDING

AS

SELECT 商品號,SUM(銷售數量*銷售價格) 銷售額,

COUNT_BIG(*) cnt

FROM dbo.銷售明細

GROUP BY 商品號;

CREATE UNIQUE CLUSTERED INDEXix_商品銷售額

ON 商品銷售額視圖(商品號);(10分)

(1)請分析該技術人員給出的語句功能以及對原有查詢語句的性能影響,並給出原因。

(2)此商場的銷售量很大,每天有大量數據插入到銷售明細表中。請從數據庫整體性能角度分析,此技術人員提出的優化方法是否合適,並給出原因。

A3:

(1)【解題思路】

該技術人員使用了帶有索引的視圖,將所關心的數據(商品號,銷售額,該商品號在表中出現的次數)從銷售明細表中提取出來建立視圖,並對該視圖建立按商品號排序的聚簇索引,這樣大大減少了在搜索不同商品的銷售額時調用的數據表的規模,從而提高了查詢效率。由於表的數據規模很大,建立該視圖後,同一種商品不會多次出現在表中,而是通過一個計數變量cnt表示,這樣在檢索時大大減少了檢索規模。創建索引時,UNIQUE關鍵字表明此索引的每一個索引值只對應唯一的數據記錄。CLUSTER表示要建立的索引是聚簇索引,所謂聚簇索引是指索引項的順序與表中記錄的物理順序一致的索引組織。

【參考答案】

語句功能:建立包含(商品號,銷售額,該商品表中出現次數)的帶索引的視圖,並建立按商品對應銷售額UNIQUE聚簇排序的索引,大大縮小了查詢語句的查詢範圍,提高了查詢效率。原因:視圖中將間接相關的屬性列(序列號,銷售日期,商品號,銷售數量,銷售價格)轉換成了目標屬性列,減少了搜索空間;同時建立UNIQUE CLUSTERED索引,使查詢商品號的數據記錄唯一,降低了搜索範圍,提高了搜索效率。

(2)【解題思路】

由於視圖是不實際存儲數據的虛表,因此對視圖的更新最終要轉換爲對基本表的更新。而用戶通過視圖對數據進行增加、刪除、修改時,有意或無意地對不屬於視圖範圍內的基本表數據進行操作,會破壞數據的一致性。而且視圖中的數據本身就是冗餘的,每次對錶進行修改時,同時也要對相應的視圖進行修改,這大大增加了系統的負擔。

【參考答案】

不合適,每天大量的插入操作在修改表的同時也要對視圖進行修改,增加了系統的負擔,然而該統計功能一個月才用一次,這樣導致系統的利用率也較爲低下。

Q4:

某教務管理系統使用SQL Server 2008數據庫管理系統,數據庫軟硬件配置信息如下:

Ⅰ.數據庫運行在兩路Intel Xeon E5-2609 2.4GHz CPU(每路CPU4核心),128GB內存、2塊300GB15000轉SAS硬盤(RAID 1)的服務器上;

Ⅱ.服務器操作系統爲Windows 2003 32位企業版,安裝SP2補丁;

Ⅲ.數據庫爲SQL Server 2008 Enterprise(32 位),數據庫中總數據量近130GB。

近一個學期以來,用戶反映系統運行緩慢,經程序員定位,確定爲數據庫服務器響應緩慢,需要進行調優。

A4:

【解題思路】

數據庫性能優化的基本原則就是通過儘可能少的磁盤訪問獲得所需要的數據。SQL SERVER性能優化一般從數據庫設計、應用程序編碼、硬件優化、數據庫索引、SQL語句、事務處理幾個方面入手考慮問題。

(1) 分析階段:在系統分析階段往往有太多需要關注的地方,系統各種功能性、可用性、可靠性、安全性需求吸引了我們大部分的注意力,但必須注意的是,性能往往是很重要的非功能性需求,必須根據系統的特點確定其實時性需求、響應時間的'需求、硬件的配置等。最好能有各種需求量化的指標。

(2) 設計階段:例如數據庫邏輯設計規範化;合理的冗餘;主鍵的設計;外鍵的設計 ;字段的設計 ;數據庫物理存儲和環境的設計;數據庫的物理存儲、操作系統環境及網絡環境的設計,皆使得我們的系統在將來能適應較多用戶的併發操作和較大的數據處理量。 這裏需要注意文件組的作用,適用文件組可以有效的把I/O操作分散到不同的物理硬盤,提高併發能力。

(3) 系統設計:整個系統的設計,特別是系統結構的設計對性能具有很大的影響。對於一般的OLTP系統,可以選擇C/S結構、三層的C/S結構等,不同的系統結構其性能的關鍵也有所不同。系統設計階段應歸納些業務邏輯在數據庫編程階段實現,數據庫編程包括數據庫存儲過程、觸發器和函數。用數據庫編程實現業務邏輯的好處是減少網絡流量並能更充分利用數據庫的預編譯和緩存功能;索引設計階段可以根據功能和性能的需求進行初步的索引設計,這裏需要根據預計的數據量和查詢來設計索引,可能與將來實際使用時有所區別。

(4) 編碼階段:編碼階段首先需要所有程序員具備優化意識,也就是在實現功能的同時具備考慮優化性能的思想。數據庫是能進行集合運算的工具,所謂集合運算實際是批量運算,即是儘量減少在客戶端進行大數據量的循環操作,而用SQL語句或者存儲過程代替。這個階段主要是注意在SQL語句等方面的優化,如:儘量少做重複的工作,用SELECT後跟需要的字段代替SELECT*語句,注意事務和鎖 ,注意臨時表和表變量的用法,慎用遊標和觸發器,儘量使用索引等。

(5) 硬件優化:RAID (獨立磁盤冗餘陣列)是由多個磁盤驅動器(一個陣列)組成的磁盤系統。通過將磁盤陣列當作一個磁盤來對待,基於硬件的RAID允許用戶管理多個磁盤。使用基於硬件的RAID與基於操作系統的RAID相比較可知,基於硬件的RAID能夠提供更佳的性能,如果使用基於操作系統的RAID,那麼它將佔據其他系統需求的CPU週期,通過使用基於硬件的RAID,用戶在不關閉系統的情況下能夠替換髮生故障的驅動器。利用數據庫分區技術,可均勻地把數據分佈在系統的磁盤中,平衡I/O 訪問,避免I/O 瓶頸等。