數(shù)據(jù)庫系統(tǒng)作為管理信息系統(tǒng)的核心,各種基于數(shù)據(jù)庫的聯(lián)機(jī)事務(wù)處理以及聯(lián)機(jī)分析處理正慢慢的轉(zhuǎn)變成為計(jì)算機(jī)應(yīng)用的最為重要的部分,根據(jù)以往大量的應(yīng)用實(shí)例來看,在數(shù)據(jù)庫的各種操作中,查詢操作所占的比重最大,而在查詢操作中基于SELECT語句在SQL語句中又是代價(jià)最大的語句。如果在使用中采用了優(yōu)秀的查詢策略,往往可以降低查詢的時(shí)間,提高查詢的效率,由此可見查詢優(yōu)化在數(shù)據(jù)庫中的重要性。
一、數(shù)據(jù)庫的優(yōu)化查詢方法
1、基于索引的優(yōu)化
數(shù)據(jù)庫的優(yōu)化方法多種多樣,不同的方法對提高數(shù)據(jù)庫查詢效率也不相同。
索引作為數(shù)據(jù)庫中的重要數(shù)據(jù)結(jié)構(gòu),它的根本目的就是為了提高查詢的效率。而優(yōu)化查詢的重要方法就是建立索引,建立適合關(guān)系數(shù)據(jù)庫系統(tǒng)的索引,這樣就可以避免表掃描,并減少了因?yàn)椴樵兌斐傻妮斎胼敵鲩_銷。有效提高數(shù)據(jù)庫數(shù)據(jù)的查詢速度,優(yōu)化了數(shù)據(jù)庫性能。然而在創(chuàng)建索引時(shí)也增加了系統(tǒng)時(shí)間和空間的開銷。所以創(chuàng)建索引時(shí)應(yīng)該與實(shí)際查詢需求相結(jié)合,這樣才能實(shí)現(xiàn)真正的優(yōu)化查詢。
1.1判斷井建立必要的索引對所要?jiǎng)?chuàng)建的索引進(jìn)行正確的判斷,使所創(chuàng)建的索引對數(shù)據(jù)庫的工作效率提高有所幫助。為了實(shí)現(xiàn)這一點(diǎn)。我們應(yīng)做到以下要求:在熟記數(shù)據(jù)庫程序中的相關(guān)sQL語句的前提下,統(tǒng)計(jì)出常用且對性能有影響的語句,判斷數(shù)據(jù)庫系統(tǒng)中哪些表的哪些字段要建立索引。其次,對數(shù)據(jù)庫中操作頻繁的表。數(shù)據(jù)流量較大的表,經(jīng)常需要與其他表進(jìn)行連接的表等,要進(jìn)行重點(diǎn)關(guān)注。這些表上的索引將對SQL語句的性能產(chǎn)生重要的影響。
1.2對索引使用的一些規(guī)則索引的使用在一些大型數(shù)據(jù)庫系統(tǒng)中會(huì)經(jīng)常使用到。這樣可以有效的提高數(shù)據(jù)庫性能,使數(shù)據(jù)庫的訪問速度得到提高。但索引的使用要恰倒好處,所以我們在使用索引時(shí)應(yīng)遵守使用原則:建立索引可以提高數(shù)據(jù)庫的查詢速度。但索引過多,不但不能實(shí)現(xiàn)優(yōu)化查詢,反而會(huì)影響到數(shù)據(jù)庫的整體性能。索g作為數(shù)據(jù)庫中實(shí)際存在的對象,每個(gè)索引都要占用一定的物理空間。所以對于索引的建立要考慮到物理空間容量,以及所建立索引的必要性和實(shí)用性。
1.3合理的索引對SQL語句的意義索引建壺之后,還要確保其得到了真正的使用,發(fā)揮了其應(yīng)有的作用。首先,可以通過SQL語句查詢來確定所建立的索引是否得到了使用,找出沒有使用到的索引。分析素引建立但沒有使用的原因,使其真正發(fā)揮作用。其次,索引得到使用以后,是否得到了預(yù)期的效果,對數(shù)據(jù)庫的性能是否實(shí)現(xiàn)了真正意義上的提高,只有合理的索引才能真正提高數(shù)據(jù)庫的性能。
2、優(yōu)化SQL語句
在使用索引時(shí)可以有效的提高查詢速度,但如果SQL語句使用不恰當(dāng)?shù)脑?,所建立的索引就不能發(fā)揮其作用。所以我們應(yīng)該做到不但會(huì)寫SQL,還要寫出性能優(yōu)良的SQL語句。下面,就如何優(yōu)化引用例子進(jìn)行說明。
首先,在進(jìn)行查詢時(shí),返回的值應(yīng)該是查詢所需要的。在查詢中應(yīng)該盡量減少對數(shù)據(jù)庫中的表的訪問行數(shù),使查詢的結(jié)果范圍最小,這就意味著在查詢時(shí),不能過多的使用通配符,如:selecf*fmm tablet語句,而應(yīng)該做到最小化查詢范圍,要查詢幾行幾列就選擇幾行幾列,如:selectcoil from tablel ;多數(shù)情況下,用戶并不需要查詢到的所有數(shù)據(jù),而只是部分或靠前的數(shù)據(jù)時(shí),我們也可以通過SQL語句來進(jìn)行限制查詢的結(jié)果,如:select top 50 coll from tablel。
其次,對于一些特殊的SQL語句,在使用時(shí)應(yīng)正確選擇。我們用一組例子來說明,如:EXISTS,NOT EXISTS。
語句一:select sum(tt,c1)from t1where((select count(*)from t2 where t2,c2=t1,c2)>0)
語句二:select sum“1,c1)from tl whereexists(select*from t2 where乜,c2=t1,c1)
兩個(gè)語句所得到的結(jié)果相同,但,語句二的效率要遠(yuǎn)高于語句一,因?yàn)檎Z句一在查詢中產(chǎn)生了大量的索引掃描。
在對數(shù)據(jù)庫查詢時(shí),所使用的語句多種多樣,但選擇恰當(dāng)?shù)牡淖志淠軌蛴行У奶岣卟樵冃省?/p>
最后,WHERE子句在使用時(shí)應(yīng)該注意的問題。
在WHERE子句中可以使用exist和not exist代替in和not in,應(yīng)該盡量避免使用in,not in,0r或者h(yuǎn)aving。可以使用表鏈接代替exist。Having可以用where代替,如果無法代替可以分兩步處理。
二、數(shù)據(jù)庫系統(tǒng)的安全
數(shù)據(jù)庫系統(tǒng)的安全框架可分為三個(gè)層次:網(wǎng)絡(luò)系統(tǒng)層次、宿主操作系統(tǒng)層次和數(shù)據(jù)庫管理系統(tǒng)層次。由于數(shù)據(jù)庫系統(tǒng)在操作系統(tǒng)下都是以文件形式進(jìn)行管理的,因此入侵者可以直接利用操作系統(tǒng)的漏洞竊取數(shù)據(jù)庫文件,或者直接利用OS工具來非法偽造、篡改數(shù)據(jù)庫文件內(nèi)容。因此,數(shù)據(jù)庫系統(tǒng)的安壘性很大程度上依賴于數(shù)據(jù)庫管理系統(tǒng)。如果數(shù)據(jù)庫管理系統(tǒng)安全機(jī)制非常強(qiáng)大,則數(shù)據(jù)庫系統(tǒng)的安全性能就較好。根據(jù)數(shù)據(jù)庫安全的三個(gè)層次,筆者提出了一個(gè)數(shù)據(jù)庫入侵檢測系統(tǒng),其外層用基于網(wǎng)絡(luò)的入侵檢測,中間層用基于主機(jī)的入侵檢測,內(nèi)層采用人侵容忍。此系統(tǒng)采用系統(tǒng)整體安全策略,綜合多種安全措施,實(shí)現(xiàn)了系統(tǒng)關(guān)鍵功能的安全性和健壯性。
三、數(shù)據(jù)庫入侵檢測技術(shù)
數(shù)據(jù)庫入侵檢測系統(tǒng)的研究與設(shè)計(jì)借鑒了針對網(wǎng)絡(luò)和針對主機(jī)的入侵檢測技術(shù),在此基礎(chǔ)上,又考慮了數(shù)據(jù)庫自身的特點(diǎn)。按照檢測方法分為:誤用檢測和反常檢測。
(1)數(shù)據(jù)庫誤用檢測
誤用檢測是指將已知的攻擊特征存儲(chǔ)在誤用特征知識(shí)庫里面,然后根據(jù)用戶的當(dāng)前操作行為與知識(shí)庫里的誤用人侵規(guī)則進(jìn)行匹配檢驗(yàn),如果符合知識(shí)庫中的入侵特征,則說明發(fā)生了入侵。誤用特征知識(shí)庫中的入侵規(guī)則由安全專家定義,可以隨時(shí)添加、修改,然后保存在知識(shí)庫中,用來對審計(jì)數(shù)據(jù)進(jìn)行匹配比較。誤用檢測的優(yōu)點(diǎn)是檢測的準(zhǔn)確率高,缺點(diǎn)是只能對已知的攻擊特征進(jìn)行匹配檢驗(yàn),對未知的攻擊類型無法發(fā)現(xiàn),而對未知攻擊類型的檢測要依靠異常檢測。所以,誤用檢測常常與異常檢測結(jié)合起來使用。
(2)數(shù)據(jù)庫反常入侵檢測
反常檢測是指將用戶正常的習(xí)慣行為特征存儲(chǔ)在特征數(shù)據(jù)庫中,然后將用戶當(dāng)前行為特征與特征數(shù)據(jù)庫中的特征進(jìn)行比較,若兩者偏差足夠大,則說明發(fā)生了反常。這種方法的優(yōu)勢在于它能從大量數(shù)據(jù)中提取人們感興趣的、事先未知的知識(shí)和規(guī)律,而不依賴經(jīng)驗(yàn),應(yīng)用在基于數(shù)據(jù)庫的入侵檢測系統(tǒng)中,可以從大量的數(shù)據(jù)中發(fā)現(xiàn)有助于檢測的知識(shí)和規(guī)則。
對于數(shù)據(jù)庫的優(yōu)化,我們要抓住關(guān)鍵問題,提出改善查詢效率,這樣才能真正使數(shù)據(jù)庫服務(wù)得到根本提高。本文在對數(shù)據(jù)庫查詢優(yōu)化的方法上,進(jìn)行了分析,提出了部分見解,有效的提高數(shù)據(jù)雇在詢數(shù)率。