董曉海
摘 要
在現(xiàn)代化技術(shù)的發(fā)展中,隨著數(shù)據(jù)數(shù)量的逐漸增加,數(shù)據(jù)庫的查詢優(yōu)化的重要性逐漸提高。而查詢優(yōu)化也成為了數(shù)據(jù)庫的核心操作環(huán)節(jié)。數(shù)據(jù)技術(shù)的發(fā)展和數(shù)據(jù)的查詢性矛盾逐漸凸顯,數(shù)據(jù)系統(tǒng)對于查詢新能有了更高的要求。因此,我們需要對數(shù)據(jù)庫管理中的主要問題進(jìn)行分析,突出查詢優(yōu)化的功能。本文將對SQL Server查詢優(yōu)化器原理與優(yōu)化進(jìn)行分析,望給相關(guān)的從業(yè)人員提供幫助。
【關(guān)鍵詞】SQL Server 查詢優(yōu)化器 原理 優(yōu)化
1 前言
在信息系統(tǒng)中,數(shù)據(jù)系統(tǒng)是進(jìn)行信息管理的核心環(huán)節(jié),也是計(jì)算機(jī)得以運(yùn)行的重要關(guān)節(jié),本文將對查詢操作中的重要作用進(jìn)行分析,并突出查詢操作在數(shù)據(jù)庫操作中心中的重要地位。數(shù)據(jù)庫中的查詢操作是依照SELECT語句進(jìn)行的操作。若信息系統(tǒng)中的數(shù)據(jù)信息已經(jīng)存在有上千條記錄,則進(jìn)行全系統(tǒng)的掃描將需要話費(fèi)十分鐘的時(shí)間,若掃描的數(shù)據(jù)的速度較慢,則需要一個(gè)小時(shí)。若使用比全表進(jìn)行掃描,將可以使用更好的掃描策略來大大的降低查詢單額時(shí)間,因此,查詢優(yōu)化技術(shù)對于提高信息系統(tǒng)的工作效率具有至關(guān)重要的作用。
2 必要性分析
數(shù)據(jù)庫中的查詢優(yōu)化不單單是RDBMS進(jìn)行技術(shù)實(shí)現(xiàn)的關(guān)鍵性環(huán)節(jié),也可以突出整個(gè)系統(tǒng)的優(yōu)勢所在。查詢優(yōu)化使得系統(tǒng)的選擇存取路徑的壓力大大降低。用戶在使用的過程中只需要提出需要運(yùn)行的指令,并不需要操作整個(gè)運(yùn)行的流程。數(shù)據(jù)系統(tǒng)在程序的優(yōu)化方面具有很大的優(yōu)勢,而且還可以使得表達(dá)查詢的效率大大提高。因此,查詢優(yōu)化的作用在進(jìn)行查詢和處理的階段具有十分重要的作用,當(dāng)在數(shù)據(jù)庫內(nèi)部提交一個(gè)查詢的語句時(shí),系統(tǒng)中的DBMS會(huì)對語句進(jìn)行檢查,并把得到的語句應(yīng)用在查詢優(yōu)化器中。而優(yōu)化器在接收到數(shù)據(jù)庫的語句命令之后,根據(jù)數(shù)據(jù)系統(tǒng)中的優(yōu)化方法進(jìn)行語句的組成分析。SQL數(shù)據(jù)庫中的優(yōu)化器主要是依據(jù)成本優(yōu)化器進(jìn)行設(shè)計(jì)的。在給定查詢分析的條件下,其對分析出很多候選的查詢計(jì)劃,同時(shí)對每個(gè)查詢計(jì)劃進(jìn)行分析,并得到查詢計(jì)劃的成本和結(jié)果,根據(jù)分析的結(jié)果選擇一個(gè)成本較低的運(yùn)行。但是在實(shí)際的運(yùn)行過程中,查詢優(yōu)化器并不可能對每個(gè)成本進(jìn)行優(yōu)化,并根據(jù)獲得的信息進(jìn)行估算,因此,查詢優(yōu)化器會(huì)綜合分析查詢計(jì)劃的質(zhì)量以及時(shí)間,并做出平衡的分析,最終得到一個(gè)最佳運(yùn)行計(jì)劃。SQL數(shù)據(jù)庫把用戶提交的語句當(dāng)作是整個(gè)數(shù)據(jù)系統(tǒng)的優(yōu)化出,其對于系統(tǒng)的運(yùn)行效率至關(guān)重要,因此,SQL的語句是查詢優(yōu)化器運(yùn)行的關(guān)鍵。
3 查詢優(yōu)化的途徑
3.1 實(shí)現(xiàn)語句的規(guī)范化書寫
為了使得SQL的運(yùn)行效率提高,我們需要對SQL的語句書寫進(jìn)行分析,并實(shí)現(xiàn)語句的規(guī)范化。在語句的書寫過程中,注重語句的大小寫等方面,避免查詢器進(jìn)行二次解析,進(jìn)而在系統(tǒng)中執(zhí)行兩個(gè)不同的計(jì)劃。
3.2 正確的使用索引
在所有的數(shù)據(jù)庫對象中,索引具有至關(guān)重要的地位。而SQL Server查詢器是通過建立索引來進(jìn)行優(yōu)化查詢的。所以,我們需要在數(shù)據(jù)庫系統(tǒng)的表格上建立較為合適的索引,這樣可以使得是表掃描被有效減少,最終使得查詢造成的開銷降低。最終可以使得數(shù)據(jù)庫的查詢效率以及查詢性能得到改變。然而在SQL Server中創(chuàng)建索引會(huì)使得系統(tǒng)的開銷在時(shí)間上和空間上都有所增加。所以,我們需要在此過程中合理的應(yīng)用系統(tǒng)的查詢需要,斌使二者緊密結(jié)合,最終達(dá)到優(yōu)化和查詢的目的。而SQL Server中的聚集索引在進(jìn)行排序的過程中需要參照聚集索引字段的順序。而其本身就是一種組織形式,因此具有較高的運(yùn)行效率。而所插入的記錄的位置不是雜亂無章的,而是需要按照一定的順序進(jìn)行,若被插入的數(shù)據(jù)頁沒有空間,則會(huì)導(dǎo)致數(shù)據(jù)頁分裂。
3.3 使用%進(jìn)行模糊查詢時(shí)需要慎重考慮
在進(jìn)行模糊查詢的關(guān)鍵字中有%和_兩個(gè),其中前者表示的是包含零個(gè)或者任意多個(gè)字符串,而后者表示的是單個(gè)字符,所以,在使用%時(shí)需要慎重考慮。
3.4 連接查詢優(yōu)化分析
SQL Server主要有三種連接的方式。在進(jìn)行連接的過程中要注意字段需要選擇含有聚集索引的字段。實(shí)際中,聚集索引的字段順序已經(jīng)得到確定,所以需要進(jìn)行兩個(gè)表的數(shù)據(jù)進(jìn)行連接。而若想保障執(zhí)行的效率需要把A表和B表的數(shù)據(jù)進(jìn)行連接。當(dāng)需要對where的條件進(jìn)行考慮時(shí),首先要做好運(yùn)算選擇,并盡量控制A表和B表的結(jié)果集,然后在進(jìn)行連接。
3.5 存儲(chǔ)過程的使用
存儲(chǔ)過程中所使用的Procedure是一組可以完成特定功能的SQL Server語句,其是在編譯結(jié)束之后,在進(jìn)行存儲(chǔ)的。其在進(jìn)行存儲(chǔ)的過程中囊括了邏輯控制語句以及數(shù)據(jù)操縱語句等,因此,Procedure可以實(shí)現(xiàn)數(shù)據(jù)的接收、輸出等。但是其在存儲(chǔ)的過程中需要在數(shù)據(jù)庫中進(jìn)行編譯,并在數(shù)據(jù)庫中進(jìn)行存儲(chǔ),因此,在運(yùn)行速度上與單獨(dú)的SQL Server語句要快很多。此外,在調(diào)用時(shí)僅僅需要使用存儲(chǔ)的名字以及必要的參數(shù)信息,所以可以減輕網(wǎng)絡(luò)負(fù)擔(dān)。
4 結(jié)語
綜上所述,我們在進(jìn)行SQL Server的開發(fā)和利用的過程中,可以使用查詢優(yōu)化器進(jìn)而提高系統(tǒng)的整體性能。查詢優(yōu)化的優(yōu)勢在進(jìn)行大量的數(shù)據(jù)查詢中十分重要。本文對SQL Server查詢優(yōu)化器的原理進(jìn)行分析,并介紹了查詢優(yōu)化的優(yōu)越性,最終提出進(jìn)行SQL Server查詢優(yōu)化的策略,發(fā)現(xiàn)SQL Server的查詢優(yōu)化實(shí)際就是在保證結(jié)果正確的基礎(chǔ)上,使用優(yōu)化器進(jìn)行語句識(shí)別,同時(shí)利用索引,控制表掃描的I/O次數(shù)。當(dāng)SQL Server收到用戶的查詢命令時(shí),可以根據(jù)優(yōu)化措施來有效地縮短查詢的時(shí)間,保障查詢的效率。這對于數(shù)據(jù)量較大的查詢操作具有重要意義。因此,為了使得海量數(shù)據(jù)的查詢更加高效,我們需要發(fā)揮SQL Server查詢優(yōu)化器的優(yōu)勢,同時(shí)進(jìn)行查詢優(yōu)化器的完善,保障查詢的質(zhì)量。
參考文獻(xiàn)
[1]劉維學(xué).SQL Server查詢優(yōu)化器原理與優(yōu)化實(shí)例分析[J].計(jì)算機(jī)技術(shù)與發(fā)展,2013(8).
[2]未培.SQL SERVER查詢優(yōu)化實(shí)證研究[J].山東農(nóng)業(yè)工程學(xué)院學(xué)報(bào),2014(05).
[3]王軍弟.SQL Server查詢優(yōu)化技術(shù)的研究與實(shí)現(xiàn)[J].科技視界,2016(06).
作者單位
云南省水文水資源局大理分局 云南省大理市 671000