忽佳文,張梅梅,王 影
(咸陽(yáng)師范學(xué)院 計(jì)算機(jī)學(xué)院,陜西 咸陽(yáng) 712000)
?
應(yīng)用系統(tǒng)中數(shù)據(jù)庫(kù)性能優(yōu)化研究
忽佳文,張梅梅,王影
(咸陽(yáng)師范學(xué)院 計(jì)算機(jī)學(xué)院,陜西咸陽(yáng)712000)
摘要:人們知道的重要SQLSERVER數(shù)據(jù)庫(kù)對(duì)象有索引、視圖、觸發(fā)器和存儲(chǔ)過(guò)程。為了起到提高系統(tǒng)安全性、提高執(zhí)行效率、方便代碼管理等效果,就需要在教務(wù)管理系統(tǒng)開(kāi)發(fā)中有效應(yīng)用這些數(shù)據(jù)庫(kù)對(duì)象技術(shù)。文章首先分析了這些數(shù)據(jù)庫(kù)對(duì)象的特點(diǎn)和優(yōu)化策略,其次介紹了視圖、觸發(fā)器和存儲(chǔ)過(guò)程在教務(wù)管理系統(tǒng)中的應(yīng)用,并結(jié)合源代碼就存儲(chǔ)過(guò)程和觸發(fā)器技術(shù)這兩種主要技術(shù)在A(yíng)SP.NET 環(huán)境中開(kāi)發(fā)教務(wù)管理系統(tǒng)這一應(yīng)用提出自己的設(shè)想。
關(guān)鍵詞:存儲(chǔ)過(guò)程;觸發(fā)器;性能優(yōu)化;教務(wù)系統(tǒng)
凡涉及數(shù)據(jù)庫(kù)技術(shù)的計(jì)算機(jī)應(yīng)用系統(tǒng)都可以稱(chēng)之為數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)。我們知道數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的應(yīng)用非常廣泛,無(wú)論是聯(lián)機(jī)事務(wù)處理或是聯(lián)機(jī)分析處理、又或是小型單機(jī)事務(wù)處理和大型信息系統(tǒng)、再或者傳統(tǒng)的業(yè)務(wù)數(shù)據(jù)處理及計(jì)算機(jī)輔助設(shè)計(jì)/制造、圖像處理、地理信息系統(tǒng)、辦公信息系統(tǒng)、Web信息管理、數(shù)據(jù)挖掘,以及電子商務(wù)、數(shù)字化出版等等,越來(lái)越多的應(yīng)用領(lǐng)域采用數(shù)據(jù)庫(kù)技術(shù)來(lái)存儲(chǔ)和處理信息資源。
當(dāng)前各種大型的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)中,數(shù)據(jù)量越來(lái)越大,數(shù)據(jù)處理越來(lái)越復(fù)雜,對(duì)數(shù)據(jù)庫(kù)性能的要求也越來(lái)越高。可是,要知道我們擁有的軟硬件資源是有限的,這就催生出一個(gè)重要的研究課題,即是如何充分利用有限的軟硬件資源,來(lái)達(dá)到獲取最大的系統(tǒng)吞吐量及數(shù)據(jù)的強(qiáng)大處理能力的效果。我們知道衡量數(shù)據(jù)庫(kù)系統(tǒng)性能良好的重要指標(biāo)之一就是響應(yīng)時(shí)間和吞吐量,響應(yīng)越快,吞吐量越大,系統(tǒng)性能自然就越好。本文主要對(duì)應(yīng)用系統(tǒng)中數(shù)據(jù)庫(kù)對(duì)象(視圖、存儲(chǔ)過(guò)程、觸發(fā)器)的優(yōu)化進(jìn)行探討,并以教務(wù)管理系統(tǒng)為例進(jìn)行說(shuō)明。
1.1視圖的應(yīng)用
根據(jù)數(shù)據(jù)庫(kù)研究領(lǐng)域給出的視圖的最新定義:視圖是從一個(gè)或幾個(gè)基本表(或視圖)導(dǎo)出的表,與基本表不同之處在于它是一個(gè)虛表。它只是作為用戶(hù)查看數(shù)據(jù)庫(kù)表中數(shù)據(jù)的一種方式。視圖的定義被存放于數(shù)據(jù)庫(kù)中,而視圖對(duì)應(yīng)的數(shù)據(jù)則不存放于數(shù)據(jù)庫(kù)中,這些數(shù)據(jù)仍存放在原來(lái)的基本表中。一個(gè)視圖可以派生出其它的視圖,可以表示來(lái)自于不同的源的數(shù)據(jù)。為一個(gè)應(yīng)用程序的數(shù)據(jù)庫(kù)代碼部分定義的視圖,實(shí)質(zhì)上相當(dāng)于很多表,我們可以對(duì)特定的視圖進(jìn)行插入數(shù)據(jù)、修改數(shù)據(jù)和刪除數(shù)據(jù)的操作。在優(yōu)化設(shè)計(jì)中合理地創(chuàng)建視圖將變得尤為重要,其主要作用有:(1)提供一定的數(shù)據(jù)邏輯獨(dú)立性。使用視圖可避免直接調(diào)用基本表,當(dāng)基本表結(jié)構(gòu)改變時(shí),我們只需要修改視圖的定義而不用修改本子系統(tǒng)的應(yīng)用程序,這極大地為系統(tǒng)的開(kāi)發(fā)提供了便利。(2)消除復(fù)雜SQL編程。用戶(hù)在實(shí)際的應(yīng)用情況中,有很多像統(tǒng)計(jì)、做報(bào)表等這類(lèi)需要復(fù)雜工作量的需求,這時(shí),為了有效降低SQL編程的復(fù)雜度,就要在多個(gè)基本表和應(yīng)用程序之間建立視圖。同時(shí),由于SQL語(yǔ)句每次執(zhí)行時(shí)系統(tǒng)都要進(jìn)行查詢(xún)分析和查詢(xún)檢查,但倘若我們使用了視圖,就會(huì)最大限度地提高效率,因?yàn)閷?duì)視圖來(lái)說(shuō)只需檢查一次,這無(wú)形中提高了系統(tǒng)的開(kāi)發(fā)和運(yùn)行效率。(3)安全保密作用。我們可以為用戶(hù)定義帶有權(quán)限的視圖,也就是定義他們對(duì)部分?jǐn)?shù)據(jù)有相應(yīng)查看權(quán)限的虛表,用戶(hù)訪(fǎng)問(wèn)基表是不安全的,這樣做可以讓他們以訪(fǎng)問(wèn)虛表的方式取代直接訪(fǎng)問(wèn)基表,從而實(shí)現(xiàn)了數(shù)據(jù)的安全控制。
1.2索引的優(yōu)化
建立索引是加快查詢(xún)速度的有效手段。為了減少甚至避免全表掃描,最大限度地減少磁盤(pán)I/O的次數(shù)以及切實(shí)有效加快表的查詢(xún),我們通常使用索引。但是,要注意的一點(diǎn)是不能對(duì)任何數(shù)據(jù)表都建立索引,這是因?yàn)樗饕谔岣卟?、改、刪語(yǔ)句的性能的同時(shí)但會(huì)大大降低插入insert語(yǔ)句的性能。因此,索引建立不當(dāng),反而會(huì)使數(shù)據(jù)庫(kù)運(yùn)行更慢。如果索引的數(shù)量過(guò)于龐大,還會(huì)增加維護(hù)上的開(kāi)銷(xiāo),同時(shí)降低系統(tǒng)的性能。因此,對(duì)索引的合理使用是非常重要的。
SQL Server中的索引包括聚集索引和非聚集索引、唯一索引和非唯一索引、單列索引和復(fù)合索引。SQL Server執(zhí)行查詢(xún)時(shí)會(huì)自動(dòng)選擇使用哪個(gè)索引,查詢(xún)優(yōu)化器會(huì)對(duì)可用的數(shù)據(jù)檢索方法進(jìn)行成本評(píng)估,從中選擇最有效的方法。
以下給出幾個(gè)建立索引應(yīng)遵循的原則:(1)主鍵屬性建立聚集索引(一般系統(tǒng)會(huì)自動(dòng)建立)。(2)存在范圍查詢(xún)和排序、分組這兩項(xiàng)有大量重復(fù)值且經(jīng)常進(jìn)行的活動(dòng)、對(duì)某屬性列訪(fǎng)問(wèn)頻繁的情況,此時(shí)考慮建立聚集索引。(3)如果有屬性列出現(xiàn)在查詢(xún)條件或表連接條件中,這時(shí)需要建立相應(yīng)索引,如果某些屬性列一起構(gòu)成了一個(gè)集合出現(xiàn)在查詢(xún)條件或表連接條件中,則就需要建立復(fù)合索引。(4)如果一個(gè)基表需要做頻繁的插入操作,我們就需要建立索引,這時(shí)應(yīng)使用fill factor(填充因子)來(lái)減少頁(yè)分裂,這樣可以有效同高并發(fā)度以及降低死鎖的發(fā)生概率。(5)如果有索引關(guān)鍵字這類(lèi)需要,那么就應(yīng)盡可能采用小數(shù)據(jù)類(lèi)型的屬性列作為鍵,這樣做是為了使盡可能多的索引鍵和指針包含在每個(gè)索引頁(yè)中。采取了這種方法,便可使一個(gè)查詢(xún)必須遍歷的索引頁(yè)面大大減少。(6)對(duì)于那些頻繁更新的列來(lái)說(shuō),最好不要包含在索引列中。
1.3存儲(chǔ)過(guò)程和觸發(fā)器的應(yīng)用
存儲(chǔ)過(guò)程是一組實(shí)現(xiàn)特定功能的、由SQL語(yǔ)句和流程控制語(yǔ)句共同組成的一個(gè)子程序,經(jīng)過(guò)數(shù)據(jù)庫(kù)編譯和優(yōu)化后存儲(chǔ)在數(shù)據(jù)庫(kù)服務(wù)器中。用戶(hù)或應(yīng)用程序通過(guò)需要的存儲(chǔ)過(guò)程的名字及相應(yīng)入口參數(shù)用以進(jìn)行調(diào)用,調(diào)用結(jié)束后即返回狀態(tài)值用來(lái)向用戶(hù)提示操作是否成功或失敗,而且能夠在遠(yuǎn)程數(shù)據(jù)庫(kù)中運(yùn)行。它的執(zhí)行速度比獨(dú)立執(zhí)行同樣的程序要快。倘若任何一個(gè)數(shù)據(jù)庫(kù)應(yīng)用程序都用到了存儲(chǔ)過(guò)程這一數(shù)據(jù)庫(kù)對(duì)象,我們可以說(shuō)它的設(shè)計(jì)是非常良好的。下面就存儲(chǔ)過(guò)程的優(yōu)點(diǎn)主要做以下幾方面小結(jié):(1)存儲(chǔ)過(guò)程可以實(shí)現(xiàn)較快的執(zhí)行速度,提高系統(tǒng)效率。存儲(chǔ)過(guò)程在首次執(zhí)行時(shí)查詢(xún)優(yōu)化器對(duì)其進(jìn)行分析、優(yōu)化并進(jìn)行編譯,然后生成最終被存在系統(tǒng)表中的執(zhí)行計(jì)劃。倘若某客戶(hù)端需要調(diào)用存儲(chǔ)在服務(wù)器中的存儲(chǔ)過(guò)程,那么他要做的是只需通過(guò)網(wǎng)絡(luò)發(fā)送該存儲(chǔ)過(guò)程名以及入口參數(shù)即可,剩下的就是交給數(shù)據(jù)庫(kù)服務(wù)器了,由數(shù)據(jù)庫(kù)服務(wù)器來(lái)執(zhí)行該存儲(chǔ)過(guò)程,無(wú)需再進(jìn)行編譯,真正做到了“一次編譯多次執(zhí)行”。待數(shù)據(jù)庫(kù)服務(wù)器執(zhí)行完指定調(diào)用的存儲(chǔ)過(guò)程后,會(huì)將結(jié)果集數(shù)據(jù)返回給剛才調(diào)用存儲(chǔ)過(guò)程的客戶(hù)端應(yīng)用程序,這就避免了因在網(wǎng)上傳送大量的命令和中間結(jié)果數(shù)據(jù)而導(dǎo)致的低性能和網(wǎng)絡(luò)負(fù)擔(dān)。這樣做不僅可以大大提高系統(tǒng)效率,還可以達(dá)到充分利用服務(wù)器的高性能來(lái)提高運(yùn)算速度的目的。(2)存儲(chǔ)過(guò)程允許標(biāo)準(zhǔn)組件式編程,提高系統(tǒng)可維護(hù)性。修改存儲(chǔ)過(guò)程是獨(dú)立的,與程序的其它部分無(wú)關(guān)。修改硬編碼SQL語(yǔ)句一般與修改存儲(chǔ)過(guò)程相比比較麻煩,并且存儲(chǔ)過(guò)程和組件能夠做到一次編寫(xiě)多次調(diào)用,因而我們通常選擇修改的不是硬編碼SQL語(yǔ)句而是存儲(chǔ)過(guò)程。并且只要過(guò)程接口不發(fā)生變化,對(duì)應(yīng)用程序源代碼是沒(méi)有影響的影響,這也就極大地提高了程序的可編程性和可移植性。(3)存儲(chǔ)過(guò)程可作為一種安全機(jī)制來(lái)充分利用,增強(qiáng)系統(tǒng)的安全性。我們可以針對(duì)不同等級(jí)用戶(hù)創(chuàng)建帶有自定義特殊操作權(quán)限的存儲(chǔ)過(guò)程,并將執(zhí)行該過(guò)程的權(quán)限授予用戶(hù),此時(shí)用戶(hù)只能通過(guò)我們所賦予特殊權(quán)限的存儲(chǔ)過(guò)程執(zhí)行它所規(guī)定的數(shù)據(jù)庫(kù)操作,而不能進(jìn)行其它操作(例如訪(fǎng)問(wèn)表)。例如,可以將執(zhí)行存儲(chǔ)過(guò)程(查詢(xún)表)的權(quán)限授予一個(gè)用戶(hù),那么他只能執(zhí)行查詢(xún)操作且因未獲得其他權(quán)限從而不能執(zhí)行除查詢(xún)以外的其他操作。(4)存儲(chǔ)過(guò)程能夠減少網(wǎng)絡(luò)負(fù)荷。當(dāng)客戶(hù)端向數(shù)據(jù)庫(kù)服務(wù)器發(fā)出執(zhí)行存儲(chǔ)過(guò)程的請(qǐng)求時(shí),在網(wǎng)絡(luò)上傳送的只有執(zhí)行存儲(chǔ)過(guò)程的命令及入口參數(shù),當(dāng)這些命令及參數(shù)到達(dá)數(shù)據(jù)庫(kù)服務(wù)器時(shí),服務(wù)器就會(huì)運(yùn)行用戶(hù)指定的存儲(chǔ)過(guò)程,運(yùn)行結(jié)束后將執(zhí)行結(jié)果和狀態(tài)信息一并返回客戶(hù)端。因?yàn)槲覀兌x了存儲(chǔ)過(guò)程,這就避免了硬編碼SQL語(yǔ)句在網(wǎng)絡(luò)上的傳遞,使得客戶(hù)機(jī)與服務(wù)器的通訊量降至最小,從而最大程度上地降低了網(wǎng)絡(luò)負(fù)擔(dān)。
在SQL Server中存儲(chǔ)過(guò)程分為五類(lèi):系統(tǒng)存儲(chǔ)過(guò)程、本地存儲(chǔ)過(guò)程(用戶(hù)創(chuàng)建的存儲(chǔ)過(guò)程)、臨時(shí)存儲(chǔ)過(guò)程、遠(yuǎn)程存儲(chǔ)過(guò)程、擴(kuò)展存儲(chǔ)過(guò)程。本文提到的存儲(chǔ)過(guò)程一般來(lái)說(shuō)是指用戶(hù)自行創(chuàng)建、且是本地的存儲(chǔ)過(guò)程,用以完成某一特定功能的存儲(chǔ)過(guò)程。在SQL Server存儲(chǔ)過(guò)程中,支持輸入(Input)、輸出參數(shù)(Output),也支持返回值參數(shù)(Return Value)。返回值參數(shù)通過(guò)Return語(yǔ)句返回,而且必須返回INT型的數(shù)據(jù),RETURN語(yǔ)句將終止SQL Server存儲(chǔ)過(guò)程。
使用CREATE PROCEDURE創(chuàng)建存儲(chǔ)過(guò)程的語(yǔ)法形式如下:
可以將本文提到的另一種數(shù)據(jù)庫(kù)對(duì)象——觸發(fā)器看成是一種特殊的存儲(chǔ)過(guò)程,它的特殊之處在于當(dāng)滿(mǎn)足某個(gè)特定條件時(shí),會(huì)自動(dòng)觸發(fā)執(zhí)行,是一種自動(dòng)觸發(fā)的存儲(chǔ)過(guò)程,較存儲(chǔ)過(guò)程而言用戶(hù)是不能直接調(diào)用它的。任何用戶(hù)對(duì)表的增、刪、改等操作均由服務(wù)器自動(dòng)激活與之對(duì)應(yīng)的觸發(fā)器。這樣,就可以解決高級(jí)形式的業(yè)務(wù)規(guī)則和復(fù)雜行為限制。
主鍵、外鍵和CHECK所不能保證的復(fù)雜的參照完整性和數(shù)據(jù)一致性若用到SQL Server數(shù)據(jù)庫(kù)觸發(fā)器就能夠?qū)崿F(xiàn)。SQL Server數(shù)據(jù)庫(kù)觸發(fā)器支持2種類(lèi)型的觸發(fā)器:(1)after觸發(fā)器(之后觸發(fā)):對(duì)于此類(lèi)觸發(fā)器來(lái)說(shuō),一旦執(zhí)行了某一諸如insert、update、delete的操作,觸發(fā)器此時(shí)被立即觸發(fā),并且它只能被定義在表上??煞譃閕nsert插入觸發(fā)器、update更新觸發(fā)器、delete刪除觸發(fā)器。在先前我們規(guī)定有約束條件,如果操作違反了這類(lèi)條件,結(jié)果是導(dǎo)致事務(wù)的回滾,觸發(fā)器就不會(huì)被觸發(fā)執(zhí)行。(2)instead of 觸發(fā)器 (之前觸發(fā)):該類(lèi)觸發(fā)器意味著并不執(zhí)行其定義的操作(insert、update、delete)而僅執(zhí)行觸發(fā)器本身。既可以在表上定義instead of觸發(fā)器,也可以在視圖上定義。
用CREATE TRIGGER命令創(chuàng)建觸發(fā)器,其定義語(yǔ)句為:
下面以一個(gè)教務(wù)管理系統(tǒng)的設(shè)計(jì)開(kāi)發(fā)來(lái)說(shuō)明數(shù)據(jù)庫(kù)對(duì)象的優(yōu)化使用。
2.1數(shù)據(jù)表及關(guān)系
教務(wù)管理系統(tǒng)數(shù)據(jù)庫(kù)命名為T(mén)eachingManage,主要包括以下數(shù)據(jù)表。數(shù)據(jù)表之間的關(guān)系圖如圖1所示。
院系表(數(shù)據(jù)庫(kù)表名:tb_Department):存放各院系相關(guān)數(shù)據(jù)。
專(zhuān)業(yè)表(數(shù)據(jù)庫(kù)表名:tb_Major):存放各院系專(zhuān)業(yè)相關(guān)數(shù)據(jù)。
教室表(數(shù)據(jù)庫(kù)表名:tb_Classroom):存放學(xué)校教室相關(guān)數(shù)據(jù)。
課程表(數(shù)據(jù)庫(kù)表名:tb_Course):存放學(xué)校開(kāi)設(shè)課程相關(guān)數(shù)據(jù)。
學(xué)生表(數(shù)據(jù)庫(kù)表名:tb_Student):存放學(xué)生相關(guān)數(shù)據(jù)。
教師表(數(shù)據(jù)庫(kù)表名:tb_Teacher):存放教師相關(guān)數(shù)據(jù)。
開(kāi)課表(數(shù)據(jù)庫(kù)表名:tb_PlanCourse):存放教師在某教室開(kāi)設(shè)課程的相關(guān)數(shù)據(jù)。
選課表(數(shù)據(jù)庫(kù)表名:tb_Grade):存放學(xué)生選修某課程的成績(jī)數(shù)據(jù)。
2.2創(chuàng)建視圖、存儲(chǔ)過(guò)程、觸發(fā)器
為每個(gè)院系學(xué)生用CREATE VIEW創(chuàng)建每個(gè)院系學(xué)生自己的視圖,將該視圖的使用權(quán)限賦予給相關(guān)院系的管理人員,這樣可以有效地保護(hù)數(shù)據(jù)的安全性,而且還可以降低SQL編程的復(fù)雜度,提高系統(tǒng)運(yùn)行性能。
CREATE VIEW V_Compu_College --創(chuàng)建信息工程學(xué)院的學(xué)生視圖
AS
SELECT StudentID, SName, SCome, SSex,SIdentityCardNumber, SPassword, STelephone,SNativePlac, MajorID, ClassName, TotalCredits
FROM tb_Student
WHERE ClassName = '信息工程學(xué)院'
WITH CHECK OPTION
所有對(duì)數(shù)據(jù)庫(kù)的操作包括對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)增刪改查的操作,都用存儲(chǔ)過(guò)程實(shí)現(xiàn)以提高系統(tǒng)效率,比如,下面存儲(chǔ)過(guò)程pro_SelectNotificationByTitle實(shí)現(xiàn)了按標(biāo)題進(jìn)行查詢(xún),其中@nTitle是參數(shù),可以實(shí)現(xiàn)對(duì)標(biāo)題的模糊查詢(xún)。系統(tǒng)在服務(wù)器端進(jìn)行查詢(xún),將查詢(xún)結(jié)果反饋到用戶(hù)端界面:
圖1 數(shù)據(jù)表之間的關(guān)系
觸發(fā)器可以有效地實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)規(guī)則和行為限制。教務(wù)管理系統(tǒng)中有一項(xiàng)重要功能就是學(xué)生選課,可以創(chuàng)建觸發(fā)器統(tǒng)計(jì)選課人數(shù)并判斷選課人數(shù)是否超過(guò)限選人數(shù),如果選課人數(shù)沒(méi)有超過(guò)限選人數(shù),則該生可以選修該課程;否則該生不能選修該課程。
2.3創(chuàng)建應(yīng)用程序類(lèi)及頁(yè)面文件
本系統(tǒng)在Visual Studio2010集成環(huán)境下實(shí)現(xiàn)。在開(kāi)發(fā)過(guò)程中,我們采用ASP.NET分層開(kāi)發(fā)思想,即將應(yīng)用程序結(jié)構(gòu)劃分為三層獨(dú)立的包,包括用戶(hù)表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪(fǎng)問(wèn)層。首先建立一個(gè)ASP.NET動(dòng)態(tài)網(wǎng)站,命名為T(mén)eachingManageSystem(教務(wù)管理系統(tǒng))。下面以一個(gè)查詢(xún)?yōu)槔f(shuō)明存儲(chǔ)過(guò)程的調(diào)用。
在網(wǎng)站中創(chuàng)建一個(gè)頁(yè)面,以查詢(xún)關(guān)鍵字operName為形參,在頁(yè)面代碼中調(diào)用a d m in .cs類(lèi)中的方法SelectNotificationByTitle。
admin.cs類(lèi)中包含了管理員對(duì)數(shù)據(jù)的所有操作,在該類(lèi)中實(shí)現(xiàn)存儲(chǔ)過(guò)程的構(gòu)造,并調(diào)用SqlHelper.cs類(lèi)文件中的方法ExecuteStoredProcedure執(zhí)行存儲(chǔ)過(guò)程。
public static DataTable SelectNotificationByTitl e(string nTitle)--業(yè)務(wù)邏輯層,構(gòu)造存儲(chǔ)過(guò)程
在SqlHelper.cs類(lèi)文件中實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的連接、數(shù)據(jù)庫(kù)命令的執(zhí)行及數(shù)據(jù)結(jié)果的返回。SqlHelper.cs類(lèi)文件中ExecuteStoredProcedure方法實(shí)現(xiàn)各個(gè)存儲(chǔ)過(guò)程。
本文在教務(wù)管理系統(tǒng)的開(kāi)發(fā)過(guò)程中,為了達(dá)到提高系統(tǒng)的開(kāi)發(fā)效率以及方便地維護(hù)程序這樣的效果,以視圖和存儲(chǔ)過(guò)程等方式,將與數(shù)據(jù)庫(kù)相關(guān)的增、刪、改、查等的操作寫(xiě)到數(shù)據(jù)庫(kù)組件中,而通過(guò)數(shù)據(jù)控件調(diào)用視圖或存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn)數(shù)據(jù)呈現(xiàn)。一旦維護(hù)人員有了想修改某些與數(shù)據(jù)庫(kù)相關(guān)的功能模塊的想法后,那么他便可以直接在后臺(tái)數(shù)據(jù)庫(kù)修改相應(yīng)的視圖和存儲(chǔ)過(guò)程即可,無(wú)須改程序代碼,無(wú)須重新編譯,真正做到“一次編譯到處運(yùn)行”。如果在教務(wù)系統(tǒng)軟件開(kāi)發(fā)過(guò)程甚至于其他應(yīng)用到數(shù)據(jù)庫(kù)技術(shù)的系統(tǒng)開(kāi)發(fā)過(guò)程中綜合運(yùn)用存儲(chǔ)過(guò)程和視圖,將會(huì)起到一系列諸如軟件設(shè)計(jì)極大便利、軟件高度安全可靠、軟件運(yùn)行效率高等的驚人效果。SQLSERVER數(shù)據(jù)庫(kù)對(duì)象除了存儲(chǔ)過(guò)程和視圖以外,另有觸發(fā)器和索引等,如果能在今后應(yīng)用程序開(kāi)發(fā)過(guò)程中,綜合運(yùn)用之前提到的數(shù)據(jù)庫(kù)組件,也將會(huì)帶來(lái)意想不到的“一石多鳥(niǎo)”的效果。
[參考文獻(xiàn)]
[1]李俊.基于A(yíng)sp.net的B2C電子商務(wù)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].重慶:重慶大學(xué),2012.
[2]吳伶琳,楊正校.SQL Server 2005數(shù)據(jù)庫(kù)基礎(chǔ)[M].大連:大連理工大學(xué)出版社,2010.
[3]歐陽(yáng)昉.網(wǎng)上商城購(gòu)物系統(tǒng)研究與開(kāi)發(fā)[D].成都:電子科技大學(xué),2007.
[4]王珊,薩師煊.數(shù)據(jù)庫(kù)系統(tǒng)概論[M].5版.北京:高等教育出版社,2015.
[5]孟憲虎.大型數(shù)據(jù)庫(kù)管理系統(tǒng)技術(shù)應(yīng)用與實(shí)例分析[M].北京:電子工業(yè)出版社,2011.
[6]劉衛(wèi)國(guó),熊擁軍.數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用----SQL Server2005[M].北京:清華大學(xué)出版社,2012.
[7]李春芬,吳英斌.存儲(chǔ)過(guò)程在勘探設(shè)備管理系統(tǒng)中的應(yīng)用[J].物探裝備,2011(5):327-330.
[8]陳曉丹,王娟.存儲(chǔ)過(guò)程在信息發(fā)布系統(tǒng)中的研究與應(yīng)用[J].武漢工程職業(yè)技術(shù)學(xué)院學(xué)報(bào),2010(2):36-38.
[9]吳伶琳.存儲(chǔ)過(guò)程在網(wǎng)上商城系統(tǒng)開(kāi)發(fā)中的應(yīng)用[J].計(jì)算機(jī)時(shí)代,2013(2):31-33.
Research on Database Performance Optimization in Application System
Hu Jiawen, Zhang Meimei, Wang Ying
(School of Computer Science, Xianyang Normal University, Xianyang712000, China)
Abstract:As we all know, indexes, views, triggers and stored procedures are important database objects in SQLSERVER. In order to play important effects, such as to improve system security, improve the effciency, easy code management etc, the effective application of these database objects technology needs to be used in Educational Management System. Firstly, the paper analyzes the characteristics and optimization strategies of these database objects, secondly it introduces the applications of views, triggers and stored procedures in educational management system. Finally, put forward our own ideas for stored procedures and triggers technology in Educational Administration System in ASP.NET environment combined with the source code.
Key words:stored procedure; trigger; performance optimization; educational management system
基金項(xiàng)目:咸陽(yáng)師范學(xué)院科研項(xiàng)目;項(xiàng)目編號(hào):12XSYK069。陜西省大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目;項(xiàng)目編號(hào):2015004。
作者簡(jiǎn)介:忽佳文(1995-),男,河南鄭州,本科。