◆徐映帆
(四川農(nóng)業(yè)大學(xué) 四川 611830)
SQL數(shù)據(jù)庫的設(shè)計的相關(guān)內(nèi)容
◆徐映帆
(四川農(nóng)業(yè)大學(xué) 四川 611830)
數(shù)據(jù)庫系統(tǒng)是整個管理信息系統(tǒng)的基礎(chǔ)和核心,其作用是將大量數(shù)據(jù)按照一定的規(guī)則組織在一起,方便準(zhǔn)確,及時提供給用戶。設(shè)計數(shù)據(jù)庫看起來很簡單,但實現(xiàn)數(shù)據(jù)庫性能優(yōu)化在數(shù)據(jù)庫設(shè)計中非常困難,應(yīng)用程序結(jié)構(gòu),開發(fā)工具,界面選擇和查詢設(shè)計都可以優(yōu)化。一般來說,改進(jìn)數(shù)據(jù)庫性能有很多方法,其中改進(jìn)的數(shù)據(jù)庫設(shè)計是一種有效的方法。影響SQL數(shù)據(jù)庫優(yōu)化性能的因素很多,包括主觀人為因素和客觀因素,其中數(shù)據(jù)庫設(shè)計是其中的一個因素。
數(shù)據(jù)庫設(shè)計;SQL數(shù)據(jù)庫;性能優(yōu)化
隨著互聯(lián)網(wǎng)的使用越來越多,對數(shù)據(jù)庫的應(yīng)用訪問越來越頻繁。如何提高數(shù)據(jù)庫操作的效率,減少響應(yīng)時間變得越來越重要。為了實現(xiàn)這一目標(biāo),最簡單的解決方案是增加數(shù)據(jù)冗余并減少查詢過程中多個表的使用。但是數(shù)據(jù)冗余的增加會導(dǎo)致數(shù)據(jù)維護(hù)問題,如在一個表中更新或插入一條記錄,則需要在相應(yīng)的字段中更新相關(guān)表或插入新記錄。如果這些操作在業(yè)務(wù)流程中,無疑會增加服務(wù)器的負(fù)擔(dān)。使用SQL觸發(fā)器可以解決這個問題,觸發(fā)器可以在業(yè)務(wù)流程操作中更新或插入,在相關(guān)表中進(jìn)行自動處理,這些操作在數(shù)據(jù)庫中自動運(yùn)行,減少網(wǎng)絡(luò)訪問,執(zhí)行效率會要高得多。
要優(yōu)化SQL Server數(shù)據(jù)庫的性能,在數(shù)據(jù)庫設(shè)計中,您需要熟悉基本結(jié)構(gòu),同時了解數(shù)據(jù)庫的存儲方式。首先,數(shù)據(jù)庫通常包含一個主數(shù)據(jù)文件,另外還包含一個或多個事務(wù)日志文件,還有一些還包含輔助數(shù)據(jù)文件。數(shù)據(jù)庫將以主要數(shù)據(jù)文件為起點,另一部分?jǐn)?shù)據(jù)庫文件管理,主數(shù)據(jù)文件包含數(shù)據(jù)庫啟動信息,因此,對于所有數(shù)據(jù),主數(shù)據(jù)文件是不可或缺的。對于事務(wù)日志文件,它包含恢復(fù)數(shù)據(jù)庫的所有日志信息。所以對于數(shù)據(jù)庫,日志文件也是不可或缺的,每個數(shù)據(jù)庫至少包含一個日志文件。輔助數(shù)據(jù)文件是指除主數(shù)據(jù)文件以外的數(shù)據(jù)文件。在數(shù)據(jù)庫中,如果主數(shù)據(jù)文件包含所有數(shù)據(jù),則數(shù)據(jù)庫不能設(shè)置輔助數(shù)據(jù)文件。對于一些大型數(shù)據(jù)庫,為了提高數(shù)據(jù)處理的效率,還將設(shè)置一些輔助數(shù)據(jù)文件。
當(dāng)創(chuàng)建數(shù)據(jù)庫時,系統(tǒng)數(shù)據(jù)庫內(nèi)的模型數(shù)據(jù)庫復(fù)制,在相應(yīng)的數(shù)據(jù)庫中將被復(fù)制; SQL Server數(shù)據(jù)庫,頁面存在的基本數(shù)據(jù)單位,定義為大小為8KB的連續(xù)磁盤空間,數(shù)據(jù)庫不能與Page SQL Server2000數(shù)據(jù)庫交叉,例如一行最多包含8060個字節(jié);數(shù)據(jù)庫擴(kuò)展是表或索引分配一定空間的基本單位,如果表相對較小,在擴(kuò)展中可以與其他數(shù)據(jù)庫共享,擴(kuò)展8個相鄰頁面;在事務(wù)日志文件中,將保存一些重要信息以方便數(shù)據(jù)恢復(fù),只有在系統(tǒng)故障數(shù)據(jù)恢復(fù)的情況下。在設(shè)計數(shù)據(jù)庫時,首先要了解數(shù)據(jù)庫的結(jié)構(gòu),熟悉數(shù)據(jù)庫結(jié)構(gòu),有利于數(shù)據(jù)庫設(shè)計的標(biāo)準(zhǔn)化。數(shù)據(jù)庫文件和事務(wù)日志映射到磁盤,數(shù)據(jù)庫管理,用戶在使用數(shù)據(jù)庫進(jìn)程時,系統(tǒng)的性能得到了有效的提高,同時系統(tǒng)的容錯也實現(xiàn)了。
在數(shù)據(jù)庫結(jié)構(gòu)設(shè)計過程中,有的經(jīng)常需要同時進(jìn)行多表聯(lián)合查詢字段的設(shè)計存在于多個表中,使業(yè)務(wù)流程在單個表中查找單個查詢所需的信息,所以達(dá)到提高效率,縮短等候時間的目的。
數(shù)據(jù)庫完整性設(shè)計將直接影響DBMS,真正體現(xiàn)現(xiàn)實世界。使用完整性控制機(jī)制可防止未經(jīng)授權(quán)的用戶向數(shù)據(jù)庫添加錯誤的數(shù)據(jù),并實施業(yè)務(wù)規(guī)則以降低應(yīng)用程序復(fù)雜性,提高系統(tǒng)的易用性,并避免系統(tǒng)性能。這個階段要求,根據(jù)需求分析的結(jié)果,系統(tǒng)可以滿足約束的要求,仔細(xì)規(guī)劃各種類型的完整性,盡量排除沖突之間的約束的完整性。一般來說,數(shù)據(jù)庫完整性約束可以分為靜態(tài)約束和動態(tài)約束。靜態(tài)約束應(yīng)包含在數(shù)據(jù)庫模式中。SQL Server主要支持PRIMARY約束,UNIQUE約束,CHECK約束,DEFAULT約束,F(xiàn)OREIGN約束和動態(tài)約束條件本身的約束通常由程序完成。其中,參考約束設(shè)計非常重要,它要求外鍵的值必須來源于空值或為被參照關(guān)系。
物理設(shè)計目標(biāo)是選擇最合理的物理結(jié)構(gòu),縮短事務(wù)響應(yīng)時間,提高存儲空間利用率,吞吐量。數(shù)據(jù)庫的物理結(jié)構(gòu)主要是指數(shù)據(jù)庫的存儲結(jié)構(gòu)和訪問方式。有三種類型的訪問方法,Index方法,Cluser方法,HASH方法,如果Index思維和Cluser思想在一起,可以更快速地訪問數(shù)據(jù)。首先Cluser索引維護(hù)支付更大的系統(tǒng)開銷。所以建立Cluser的索引要好一點。通常,您選擇將通常用作查詢關(guān)鍵字的屬性進(jìn)行索引,例如,使用索引。每個班級的每個學(xué)生的成績一度下降,查詢操作將比更新操作更多,同一類學(xué)生信息存儲在連續(xù)的物理塊中,可以減少操作,加快查詢速度。數(shù)據(jù)庫存儲結(jié)構(gòu),包括物理文件的實際存儲確定路徑;確定物理文件空間的初始大小,最大空間,增加備份策略的開發(fā)量,定期執(zhí)行數(shù)據(jù)庫和事務(wù)日志備份,如果數(shù)據(jù)庫損壞,使用日志和備份修復(fù)數(shù)據(jù)。備份策略清除何時備份,備份哪里,誰來備份,備份類型和頻率,以及所需的硬件功能和速度。日志文件可以記錄所有的insert,delete,updata操作,當(dāng)所有操作都記錄在日志文件中時,會導(dǎo)致日志文件增加,所以每個學(xué)期結(jié)束,數(shù)據(jù)庫清理,執(zhí)行完全備份,可以采取空日志文件方法來減小物理文件的大小以維護(hù)系統(tǒng)性能。
觸發(fā)器是一種特殊的存儲過程,類似于其他編程語言中的事件函數(shù)。SQL Server允許您為 INSERT創(chuàng)建一個觸發(fā)器為UPDATE、 DELETE,當(dāng)表中插入,更新和刪除記錄(視圖)或一系列T-SQL語句時。
SQL Server觸發(fā)器的觸發(fā)類型可以分為 DELETE觸發(fā)器、UPDATE觸發(fā)器和INSERT觸發(fā)器三大類。
當(dāng)INSERT觸發(fā)器被觸發(fā)時,系統(tǒng)創(chuàng)建一個名為inserted的邏輯表,并將插入的數(shù)據(jù)行復(fù)制到插入。當(dāng)DELETE觸發(fā)器觸發(fā)時,系統(tǒng)將創(chuàng)建一個名為“刪除”的邏輯表,刪除的數(shù)據(jù)行將被復(fù)制到刪除。當(dāng)UPDATE觸發(fā)器被觸發(fā)時,系統(tǒng)將創(chuàng)建一個名為“delete.inserted”的邏輯表,將更新前的數(shù)據(jù)行復(fù)制到,刪除后,更新的數(shù)據(jù)行將被復(fù)制到插入。因此,UPDATE觸發(fā)器可以理解為第一個DELETE行數(shù)據(jù),然后INSERT新建數(shù)據(jù)行。
在編寫觸發(fā)器的過程中,可以使用UPDATE(column)來確定是否在 INSERT或 UPDATE操作上指定列。您也可以使用COLUMNS_ UPDATEDO來確定是否插入或更新了所提到的列。這兩種方法只能在 INSERT或 UPDATE觸發(fā)器中使用,不能在DELETE觸發(fā)器中使用。
許多操作環(huán)境根據(jù) CPU使用情況動態(tài)調(diào)整進(jìn)程的優(yōu)先級,如果SQL Server的優(yōu)先級降低,其性能將會降低。如果要將SQL Server進(jìn)程優(yōu)先級更改為更高的值,則應(yīng)確保不會太高,甚至影響操作系統(tǒng)性能,因為SQL Server首先要依賴于正在運(yùn)行的操作系統(tǒng)的操作。
改善網(wǎng)絡(luò)的最佳方式是減少發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)包數(shù)量。有時一些查詢不會優(yōu)化對齊,從而返回比用戶需要的更多的數(shù)據(jù)。通過仔細(xì)設(shè)計您的應(yīng)用程序,您可以允許客戶端僅將行數(shù)作為預(yù)覽應(yīng)用,如有必要,返回所有結(jié)果。
網(wǎng)絡(luò)協(xié)議的選擇,必須通過的路由器,網(wǎng)關(guān)和網(wǎng)橋數(shù)量以及網(wǎng)絡(luò)緩沖區(qū)等配置參數(shù)可能會對 SQL Server客戶端/服務(wù)器的通信性能產(chǎn)生重大影響。確保網(wǎng)絡(luò)已針對SQL Server傳輸進(jìn)行了優(yōu)化。
總而言之,SQL觸發(fā)器可以在數(shù)據(jù)庫維護(hù)數(shù)據(jù)一致性中發(fā)揮重要作用,以提高數(shù)據(jù)庫查詢的效率。但在實際應(yīng)用中也應(yīng)該注意不能濫用觸發(fā)器,因為會導(dǎo)致數(shù)據(jù)庫和應(yīng)用程序的維護(hù)困難。在實際應(yīng)用中,您應(yīng)該使用諸如關(guān)系,觸發(fā)器,存儲過程,應(yīng)用程序和其他方式的關(guān)系的組合來執(zhí)行數(shù)據(jù)庫操作。
[1] 林元彥.SQL Serve:數(shù)據(jù)庫性能分析與優(yōu)化[J].電子技術(shù)與軟件工程,2013.
[2] 薩師煊,王珊.?dāng)?shù)據(jù)庫系統(tǒng)概論.高等教育出版社, 2001.
[3] 胡百敬.Microsoft SQL Server性能調(diào)校.電子工業(yè)出版社,2005.
[4] 肖桂東.SQL Server疑難解析.電工業(yè)業(yè)出版利社,2003.
[5] 章立民.SQL Server 2000中文版完全實戰(zhàn)入門篇.中國鐵道出版社,2001.