薛亞
摘要:數(shù)據(jù)庫(kù)最大的特點(diǎn)是查詢的便捷性,幾乎所有的數(shù)據(jù)庫(kù)操作都是在查詢的基礎(chǔ)上進(jìn)行的。查詢優(yōu)化提高了數(shù)據(jù)庫(kù)的查詢速度,也給數(shù)據(jù)的維護(hù)帶來(lái)了方便。
關(guān)鍵詞:SQL server;數(shù)據(jù)庫(kù);查詢優(yōu)化
中圖分類號(hào):TP315 文獻(xiàn)標(biāo)識(shí)碼:A
Query Optimization of SQL Server Database
XUE Ya
(Changzhou Technical Institute of Tourism & Commerce,Changzhou 213032,China)
Abstract:Query convenience is the biggest characteristic of databse.Almost all database operations are performed on the basis of the query.Database query optimization can improves the query speed and bring convenicence to maintenance of datadbase.
Keywords:SQL server;database;query optimization
1 引言(Introduction)
在計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)飛速發(fā)展的今天,互聯(lián)網(wǎng)已經(jīng)遍布了世界的各個(gè)角落,應(yīng)用在各行各業(yè)當(dāng)中,其中,數(shù)據(jù)庫(kù)技術(shù)始終占有重要地位[1,2]。SQL server數(shù)據(jù)庫(kù)系統(tǒng)是由微軟公司推出的一種關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng),是可擴(kuò)展性強(qiáng)、高性能和為分布式客戶機(jī)/服務(wù)器計(jì)算機(jī)所設(shè)計(jì)的數(shù)據(jù)庫(kù)管理系統(tǒng)。SQL server數(shù)據(jù)庫(kù)系統(tǒng)的應(yīng)用十分廣泛。
SQL server數(shù)據(jù)庫(kù)系統(tǒng)要正常的運(yùn)行,就必須對(duì)其進(jìn)行日常的維護(hù),在維護(hù)數(shù)據(jù)庫(kù)系統(tǒng)時(shí),必須要制定詳細(xì)的維護(hù)計(jì)劃,因?yàn)榫S護(hù)任務(wù)中最為重要的目標(biāo)是降低系統(tǒng)發(fā)生故障的時(shí)間。SQL server數(shù)據(jù)庫(kù)的維護(hù)工作非常重要,應(yīng)該要引起數(shù)據(jù)庫(kù)管理人員的充分重視,因?yàn)镾QL server數(shù)據(jù)庫(kù)系統(tǒng)的維護(hù)范圍非常廣泛,包括操作系統(tǒng)的維護(hù)、SQL server數(shù)據(jù)庫(kù)系統(tǒng)的優(yōu)化等。
2數(shù)據(jù)庫(kù)查詢優(yōu)化技術(shù)概述(Introduce technology
of database query optimization)
在SQL server數(shù)據(jù)庫(kù)系統(tǒng)中,每一次進(jìn)行查詢,數(shù)據(jù)庫(kù)內(nèi)核都需要使用優(yōu)化器優(yōu)化向SQL提交的數(shù)據(jù)操作。在優(yōu)化過(guò)程當(dāng)中,首先SQL要對(duì)句子能夠進(jìn)行優(yōu)化作出判斷,如果發(fā)現(xiàn)無(wú)法進(jìn)行優(yōu)化,那么就要掃描整個(gè)表格,如果可以進(jìn)行優(yōu)化,那么就會(huì)通過(guò)優(yōu)化器來(lái)執(zhí)行索引的選擇。通過(guò)索引來(lái)判斷能夠使用的索引,并且評(píng)定每個(gè)句子的開(kāi)銷。下面對(duì)SQL server查詢優(yōu)化技術(shù)進(jìn)行一下簡(jiǎn)單概述:
2.1 自動(dòng)查詢優(yōu)化技術(shù)
SQL server的自動(dòng)查詢優(yōu)化技術(shù)由基于開(kāi)銷的查詢優(yōu)化器來(lái)進(jìn)行的,當(dāng)提交一個(gè)SQL語(yǔ)句時(shí),這個(gè)語(yǔ)句只是表明想要從數(shù)據(jù)庫(kù)中得到什么樣的結(jié)果,對(duì)于怎么樣得到結(jié)果,SQL語(yǔ)句不會(huì)涉及。給予開(kāi)銷的查詢優(yōu)化器以CPU的使用率和磁盤I/O作為判斷依據(jù)來(lái)為每個(gè)可能的執(zhí)行規(guī)劃賦予開(kāi)銷值,然后優(yōu)化器會(huì)選擇開(kāi)銷值最小的執(zhí)行規(guī)劃來(lái)執(zhí)行。
2.2 索引技術(shù)
在SQL server數(shù)據(jù)庫(kù)中,索引是一個(gè)物理性的數(shù)據(jù)庫(kù)結(jié)果,是單獨(dú)存在的,在檢索數(shù)據(jù)的時(shí)候,對(duì)磁盤的讀寫都需要占用很大的開(kāi)銷,如果缺少了索引,就必須要對(duì)磁盤進(jìn)行識(shí)別。有了索引的幫助,查詢數(shù)據(jù)只需要索引頁(yè)面就行,索引能夠很大程度上提高查詢檢索速度。因此,要擁有查詢方便快捷的數(shù)據(jù)庫(kù),索引是必不可少的。
2.3 存儲(chǔ)過(guò)程的使用
目前,client/server應(yīng)用程序已經(jīng)被廣泛使用。在網(wǎng)絡(luò)中,SQL查詢性能的一個(gè)很重要的體現(xiàn)就是如何最大程度上使用資源而減少流量。使用存儲(chǔ),目的是減少流量,提高速度。
2.4 使用面向?qū)ο蟮姆椒▉?lái)實(shí)現(xiàn)SQL server查詢優(yōu)化
所謂的面向?qū)ο蟮牟樵兎椒?,把?duì)象作為中心點(diǎn),以類和繼承作為構(gòu)造機(jī)制,從而更好的設(shè)計(jì)和構(gòu)建相應(yīng)的軟件系統(tǒng)。
2.5 影響查詢效率的因素
SQL server數(shù)據(jù)庫(kù)系統(tǒng)在處理查詢計(jì)劃時(shí),首先要系統(tǒng)對(duì)詞法和語(yǔ)法進(jìn)行檢查,檢查完之后將其遞交給SQL server的查詢優(yōu)化器,優(yōu)化器會(huì)對(duì)數(shù)據(jù)是否存在和有效進(jìn)行索引,再進(jìn)行掃描、檢索和連接,這個(gè)計(jì)劃的執(zhí)行是在同一時(shí)間進(jìn)行的,通過(guò)分析來(lái)對(duì)計(jì)劃的執(zhí)行進(jìn)行評(píng)價(jià),通過(guò)開(kāi)銷最小的計(jì)劃來(lái)實(shí)現(xiàn),然后預(yù)編譯模塊會(huì)對(duì)語(yǔ)句進(jìn)行處理,最后生成了查詢規(guī)劃,查詢規(guī)劃會(huì)在恰當(dāng)?shù)臅r(shí)間提交給系統(tǒng),系統(tǒng)會(huì)將執(zhí)行結(jié)果反饋給客戶。在SQL server數(shù)據(jù)庫(kù)中影響查詢效率的因素主要有五點(diǎn):
第一,當(dāng)沒(méi)有索引或者索引無(wú)法使用的時(shí)候。因?yàn)樗饕軌蚶@開(kāi)全表掃描,能夠有效提高查詢速度。第二,在進(jìn)行查詢工作的時(shí)候,缺少計(jì)算列的時(shí)候是無(wú)法進(jìn)行優(yōu)化查詢的。第三,查詢出來(lái)的數(shù)據(jù)量很大的時(shí)候也會(huì)影響查詢效率。第四,返回了不必要的行和列。第五,如果查詢的時(shí)候語(yǔ)句選擇不合理,就無(wú)法進(jìn)行優(yōu)化。語(yǔ)句選擇不合理的情況主要有查詢條件中的操作不合適,多個(gè)選擇條件進(jìn)行查詢時(shí),條件的次序不是最優(yōu)。
3 SQL server數(shù)據(jù)庫(kù)的查詢優(yōu)化方法(The method
of SQL server database query optimization)
3.1 建立索引
并不是所有的數(shù)據(jù)庫(kù)都有索引,因?yàn)楹芏鄶?shù)據(jù)庫(kù)不需要使用索引,索引是否應(yīng)該存在有一些爭(zhēng)議,究其原因,主要是數(shù)據(jù)庫(kù)系統(tǒng)當(dāng)中添加索引之后,再對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢的時(shí)候,就無(wú)法對(duì)數(shù)據(jù)庫(kù)中的所有內(nèi)容進(jìn)行掃描和查詢,只能在索引范圍之內(nèi)進(jìn)行查詢了?;谶@樣一種情況,從性能角度來(lái)說(shuō),目標(biāo)表記錄的總數(shù)是固定的,因此,只有當(dāng)查詢結(jié)果比較少的時(shí)候,索引才會(huì)有較高的查詢效率,如果查詢結(jié)果很多,那么索引會(huì)導(dǎo)致查詢效率降低,這也是索引的存在有爭(zhēng)議的原因。在實(shí)際情況中,數(shù)據(jù)庫(kù)系統(tǒng)要根據(jù)應(yīng)用目的和實(shí)際狀況進(jìn)行合理配置,那些記錄數(shù)較多的數(shù)據(jù)庫(kù)應(yīng)該要建立索引,從而有效提高查詢效率。
3.2 SQL 查詢語(yǔ)句的優(yōu)化策略
一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的反應(yīng)速度的快慢,最為直接的表現(xiàn)就是優(yōu)化器的計(jì)算方法。另外,優(yōu)化器的測(cè)量和查詢表中的其他內(nèi)容和服務(wù)存在關(guān)聯(lián)。由此可見(jiàn),讓優(yōu)化器選擇恰當(dāng)?shù)乃饕捅磉_(dá)的連接手段是十分重要的。
3.3 避免全表掃描
一般情況下,數(shù)據(jù)庫(kù)在進(jìn)行查詢或者select語(yǔ)句的處理過(guò)程中,會(huì)掃描全表,在執(zhí)行的時(shí)候,如果出現(xiàn)數(shù)據(jù)更新和數(shù)據(jù)刪除的情況也會(huì)掃描全表。如果添加索引的話,能夠讓數(shù)據(jù)訪問(wèn)的速度得到提升。而要建立科學(xué)合理的索引,那就必須要充分了解數(shù)據(jù),然后在實(shí)踐中不斷進(jìn)行優(yōu)化。
3.4 合理使用索引
索引在數(shù)據(jù)庫(kù)中占有重要的地位,其對(duì)查詢速度的提高有著十分明顯的效果[3]。但是創(chuàng)建和使用索引的時(shí)候,索引都必須跟系統(tǒng)的查詢需求一致。
3.5 選擇恰當(dāng)?shù)牟僮鞣?,提高查詢效?/p>
應(yīng)該要盡可能的少用(NOT)IN,而使用(NOT)EXISTS,此外,還要盡量避免使用OR運(yùn)算符,>和<可以用>=和<=來(lái)代替,同時(shí),對(duì)于諸如IS NULL和 IS NOT NULL等操作也要盡量避免,另外,還要注意LIKE操作符的正確使用。
3.6 避免使用SELECT進(jìn)行查詢
endprint
在使用SQL語(yǔ)句的時(shí)候,一定要特別注意書寫細(xì)節(jié),避免使用SELECT來(lái)進(jìn)行查詢,在進(jìn)行篩選的時(shí)候,盡量避免使用表達(dá)式,而要用常量來(lái)代替,而且如果表中數(shù)據(jù)量很大的話,要特別注意WHERE子句中的篩選條件的順序,因?yàn)檫@會(huì)直接影響查詢效率。
3.7 SQL語(yǔ)句對(duì)索引的利用
在實(shí)際的應(yīng)用中,聚集索引的效率要比非聚集索引要高,聚集索引能夠?qū)?shù)據(jù)在物理順序上進(jìn)行排列,計(jì)算在其中存在一些重復(fù)值,但是仍然集中在一起,這就能夠?qū)⒉樵兎秶i定在一個(gè)較小范圍之內(nèi),可以有效提高掃描速度。
3.8 合理使用臨時(shí)表
針對(duì)那些數(shù)據(jù)量很大,但是數(shù)據(jù)變化不是很多的數(shù)據(jù)庫(kù)表,可以將子集排序,同時(shí)創(chuàng)建臨時(shí)表,這就有效防止了多重排序操作,提高了查詢速度。
3.9 建立視圖
建立視圖可以幫助人們更方便的進(jìn)行數(shù)據(jù)查詢等操作,因?yàn)橐晥D可以讓人們重點(diǎn)關(guān)注他們想要了解和感興趣的數(shù)據(jù)和信息。在建立視圖的時(shí)候一定要控制視圖的規(guī)模,如果視圖的規(guī)模比基本表要小,那么,查詢速度會(huì)大大提高。
4 SQL查詢安全監(jiān)控系統(tǒng)(The SQL query safety
monitoring system)
SQL數(shù)據(jù)庫(kù)系統(tǒng)的安全性也是人們關(guān)注的焦點(diǎn)[4-6],如果發(fā)現(xiàn)用戶進(jìn)行非法操作,系統(tǒng)就會(huì)自行進(jìn)行處理。在監(jiān)控攻擊行為的時(shí)候,系統(tǒng)會(huì)對(duì)非法用戶發(fā)出警告,同時(shí)還會(huì)對(duì)相關(guān)信息進(jìn)行記錄,在必要的情況下,還可能會(huì)阻斷網(wǎng)絡(luò)。在SQL系統(tǒng)中,有信息獲取、分析機(jī)和控制臺(tái)三個(gè)子系統(tǒng),這三個(gè)系統(tǒng)之間會(huì)存在交互工作。
4.1 主機(jī)來(lái)實(shí)現(xiàn)報(bào)警
開(kāi)啟探頭之后,可以獨(dú)立監(jiān)控?cái)?shù)據(jù)庫(kù),給予數(shù)據(jù)庫(kù)中的相關(guān)信息,把信息根據(jù)一定的規(guī)則進(jìn)行分析,通過(guò)分析,判斷數(shù)據(jù)庫(kù)是否存在安全隱患,并且確定是否需要發(fā)出危險(xiǎn)警報(bào)。如果某臺(tái)的計(jì)算機(jī)在進(jìn)行非法操作的時(shí)候,系統(tǒng)會(huì)記錄該計(jì)算機(jī)的IP地址,并且按照上述步驟進(jìn)行操作,控制臺(tái)一旦收到危險(xiǎn)警報(bào),就會(huì)根據(jù)指令來(lái)執(zhí)行阻斷指令。分析機(jī)把阻斷指令傳遞給探頭,探頭會(huì)調(diào)用SQL server數(shù)據(jù)庫(kù)系統(tǒng)中的API函數(shù),從而對(duì)進(jìn)行非法操作的計(jì)算機(jī)的操作行為進(jìn)行攔截,保證數(shù)據(jù)庫(kù)中的數(shù)據(jù)和信息不會(huì)被泄漏、丟失和破壞。
4.2 下發(fā)命令
當(dāng)控制臺(tái)發(fā)出指令之后,指令會(huì)傳遞給分析機(jī)和信息獲取部分,最后會(huì)通過(guò)對(duì)模塊的響應(yīng)來(lái)實(shí)現(xiàn)指令的操作。
4.3 傳送相關(guān)數(shù)據(jù)
探頭、分析機(jī)和控制臺(tái)三者之間的數(shù)據(jù)傳遞都是通過(guò)端口來(lái)進(jìn)行的,要有效傳送數(shù)據(jù)和信息,這些信息的格式是要統(tǒng)一的,如果不是統(tǒng)一的標(biāo)準(zhǔn)格式,信息無(wú)法傳遞和接收。
5 結(jié)論(Conclusion)
SQL server數(shù)據(jù)庫(kù)系統(tǒng)是一個(gè)很龐大的系統(tǒng),在應(yīng)用過(guò)程中,數(shù)據(jù)庫(kù)的運(yùn)行速度和運(yùn)行效率是十分重要的,有些數(shù)據(jù)庫(kù)運(yùn)行速度慢、運(yùn)行效率低,嚴(yán)重影響了數(shù)據(jù)庫(kù)的性能。因此,在設(shè)計(jì)和開(kāi)發(fā)數(shù)據(jù)庫(kù)的時(shí)候,一定要將數(shù)據(jù)庫(kù)的運(yùn)行速度和效率放到重要位置。要有效提高數(shù)據(jù)庫(kù)的使用效率和查詢效率,就必須對(duì)數(shù)據(jù)庫(kù)進(jìn)行全面的分析,了解數(shù)據(jù)庫(kù)的缺陷,優(yōu)化語(yǔ)句設(shè)計(jì),從而發(fā)現(xiàn)語(yǔ)句查詢優(yōu)化的關(guān)鍵。進(jìn)行數(shù)據(jù)庫(kù)查詢優(yōu)化是一項(xiàng)復(fù)雜的工作,需要從整體的角度來(lái)綜合處理,要從各個(gè)方面分析影響查詢優(yōu)化的因素,依據(jù)實(shí)際情況來(lái)優(yōu)化SQL語(yǔ)句??茖W(xué)合理的設(shè)計(jì)數(shù)據(jù)庫(kù)是數(shù)據(jù)庫(kù)運(yùn)行良好的基礎(chǔ),在此基礎(chǔ)上,對(duì)數(shù)據(jù)庫(kù)進(jìn)行優(yōu)化能夠提高查詢效率,從而滿足用戶的需求。
參考文獻(xiàn)(References)
[1] 劉芬.關(guān)于SQL數(shù)據(jù)庫(kù)的性能優(yōu)化問(wèn)題的研究[J].軟件,2012,33(6):139-141.
[2] 楊潤(rùn)秋,張慶敏,張愷翊.基于防火墻技術(shù)對(duì)網(wǎng)絡(luò)安全防護(hù)的認(rèn)識(shí)[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2013(15):137;139.
[3] 李麗宏,趙娜.卡爾曼濾波在動(dòng)態(tài)汽車衡稱量中的應(yīng)用[J].軟件,2012,33(3):25-28.
[4] 李輝,王至邀.一種多條件分頁(yè)查詢優(yōu)化方法的設(shè)計(jì)[J].計(jì)算機(jī)工程,2010(2):23-24.
[5] 王力,王成良.基于免疫遺傳算法的關(guān)系型數(shù)據(jù)庫(kù)查詢優(yōu)化技術(shù)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2008,18(1):72-75.
[6] 石劍平,蔡光程.SQL Server 2005查詢優(yōu)化技術(shù)的研究與實(shí)現(xiàn)[J].信息系統(tǒng)工程,2010,23(5):78-79.
作者簡(jiǎn)介:
薛 亞(1979-),女,碩士,講師.研究領(lǐng)域:計(jì)算機(jī)軟件及應(yīng)用.
endprint