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