摘要:基于關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)查詢語言SQL被大量的應(yīng)用到數(shù)據(jù)庫內(nèi),利用其查詢與檢索方面的功能可以使得系統(tǒng)運(yùn)行更加的準(zhǔn)確,但是效率方面卻并不理想。數(shù)據(jù)庫性能水平高低通常需要從響應(yīng)時間與吞吐量方面出發(fā)分析。響應(yīng)時間越短、吞吐量越大,則表示數(shù)據(jù)庫功能越強(qiáng)。本文重點(diǎn)分析的是數(shù)據(jù)庫內(nèi)進(jìn)行SQL語句優(yōu)化的主要方法,提出具體優(yōu)化原則。
關(guān)鍵詞:數(shù)據(jù)庫性能;查詢;優(yōu)化;SQL語句1SQL概述
查詢優(yōu)化是關(guān)系數(shù)據(jù)庫內(nèi)極為重要的組成部分,其能夠讓各項關(guān)系數(shù)據(jù)庫與非過程化的SQL查詢語言發(fā)展取得非常好的效果。而針對優(yōu)化來說,其對于系統(tǒng)方面的運(yùn)行既是機(jī)遇,也是挑戰(zhàn)。挑戰(zhàn)主要就是關(guān)系系統(tǒng)為了能夠達(dá)到用戶使用的最低功能而進(jìn)行查詢優(yōu)化。因?yàn)殛P(guān)系表達(dá)式的語義級別是很高的,這樣就會讓整個關(guān)系系統(tǒng)能夠體現(xiàn)出具體的查詢語義,進(jìn)而讓查詢優(yōu)化提升總體效果。
當(dāng)前,目前所應(yīng)用的關(guān)系數(shù)據(jù)庫管理系統(tǒng)絕大多數(shù)都能夠通過應(yīng)用查詢語言SQL(Structured Query Language)來實(shí)現(xiàn)優(yōu)化。數(shù)據(jù)庫管理系統(tǒng)在運(yùn)行之后,可以高效獲得各項數(shù)據(jù)信息,了解維護(hù)效果,合理的組織進(jìn)行存儲數(shù)據(jù)運(yùn)行。其能夠?qū)崿F(xiàn)數(shù)據(jù)庫的管理與控制,確保數(shù)據(jù)庫運(yùn)行更加的安全、可靠,同時還能夠?qū)崿F(xiàn)數(shù)據(jù)共享。在用戶根據(jù)需要檢索相應(yīng)數(shù)據(jù)信息,能夠利用SQL語言直接將請求發(fā)射出去,系統(tǒng)會自動處理該請求,將檢索到的數(shù)據(jù)直接發(fā)回給用戶。
數(shù)據(jù)庫操作過程中,查詢工作量是巨大的,在實(shí)際應(yīng)用中是通過SE-LECT語句在SQL語句中的代價是最大的。如果在操作中應(yīng)用了優(yōu)秀查詢策略,就能夠提高查詢的速度和質(zhì)量,縮短查詢時間,其對于查詢有著非常高的效果。人們通過在應(yīng)用SQL查詢語句時有錯誤觀點(diǎn),就是過度的重視正確率,卻沒有關(guān)注不同的SQL查詢語句實(shí)現(xiàn)方式所存在的不同點(diǎn),這種不同點(diǎn)在復(fù)雜數(shù)據(jù)庫中應(yīng)用效果更好。
通過合理檢索方式可以提升查詢效率,但是如果SQL查詢語句缺乏合理性,就會導(dǎo)致索引功能難以實(shí)現(xiàn),因此,應(yīng)該能夠?qū)懗鯯QL查詢語句,還要提升該語句的性能,以保證檢索的效率和質(zhì)量符合人們使用需要。
2物理查詢
select*fromtab1,tab2wheretab1.id=tab2.idandtab1.col1=123and tab2.col1='abc'照這個語句的順序,先要tab1和tab2進(jìn)行笛卡爾乘積,再按照tab1.col1=123and tab2.col1='abc'進(jìn)行篩選。從這個方面出發(fā),即使是初學(xué)者也認(rèn)為該方式的查詢效率是極低的,首先應(yīng)該充分了解邏輯處理與物力處理之間的差異,邏輯處理是執(zhí)行該查詢能夠獲得怎樣的結(jié)果,而邏輯查詢的各個環(huán)節(jié)都要從該查詢在邏輯執(zhí)行者的先后順序,按照該順序得到相應(yīng)的查詢結(jié)果,這與數(shù)學(xué)中先乘除后加減的運(yùn)算順序的原理是相同的。
邏輯查詢的目的是獲取所需要的結(jié)果,而獲得該結(jié)果需要經(jīng)過怎樣的過程卻是不關(guān)心的。而物理處理是獲得該結(jié)果的同時,還要確保其性能合理。下面具體分析物理處理方式。
當(dāng)一個SQL查詢語句進(jìn)入到數(shù)據(jù)庫搜索引擎之后,其主要的作用就是按照查詢計劃開展工作,此時會有兩種情況發(fā)生,其一就是緩存中無法確定具體的查詢計劃方式,然后系統(tǒng)會根據(jù)需要自動生成另外一個計劃;其二是該查詢計劃已經(jīng)真實(shí)的存在與緩存中,然后就是根據(jù)該計劃開始進(jìn)行查詢作業(yè)。
執(zhí)行計劃在編譯生成階段,具體要經(jīng)過如下幾個步驟才能實(shí)現(xiàn):
第一步:分析,這是進(jìn)行分批處理形成分析樹的主要環(huán)節(jié),同時還應(yīng)該根據(jù)需要來檢測確定語句是否能夠達(dá)到正確性的標(biāo)準(zhǔn)。
第二步:代數(shù)化,該階段的作用就是進(jìn)行第一步分析樹的輸入,生成之后可以形成查詢處理器作為輸出內(nèi)容,進(jìn)而可以實(shí)現(xiàn)查詢優(yōu)化的效果。
第三步:查詢優(yōu)化,主要是通過查詢優(yōu)化器組件來完成該步驟。查詢階段需要明確具體的順序訪問表,然后確定具體的索引方法,經(jīng)過確定各種聯(lián)接算法來明確具體的查詢優(yōu)化器組件,但是該方式的確定并不是隨意進(jìn)行的,應(yīng)該達(dá)到前提條件才能進(jìn)行,以保證最終的結(jié)果集符合人們的查詢需要。從這一方面出發(fā),結(jié)果集必須要按照具體的邏輯處理方式來得到相應(yīng)的各個階段的結(jié)果。優(yōu)化器應(yīng)該根據(jù)需要實(shí)現(xiàn)查詢的多個變體確定,最終能夠確定成本最低的一個查詢計劃。
3???? SQL子句分析
數(shù)據(jù)庫查詢作業(yè)的設(shè)計過程中,所使用的查詢數(shù)據(jù)的樣式也是多樣化的,但是選擇哪個語句來進(jìn)行,就顯得尤為重要,這是因?yàn)槠鋾绊懽罱K的查詢效率。因此,在帶有where條件時,應(yīng)該有效的預(yù)防在WHERE句子內(nèi)的字段來開展函數(shù)或者表達(dá)式的操作,這樣就會出現(xiàn)引擎索引無法進(jìn)行而開展全表的掃描處理,造成查詢的工作效率比較差。任何的對列操作的使用都會產(chǎn)生表掃描,其主要包含計算表達(dá)式、數(shù)據(jù)庫函數(shù)等等方面,在具體的查詢操作中,將其移動到等號右邊來進(jìn)行。
4???? SQL語句優(yōu)化原則
“20%的代碼用去了80%的時間”,這是開展程序設(shè)計中的重要定律和指導(dǎo)思想,數(shù)據(jù)庫的操作實(shí)踐中也應(yīng)該重視這一方面。查詢優(yōu)化應(yīng)該掌握具體的問題,比如數(shù)據(jù)庫的應(yīng)用程序,主要的目的就是要有效的提升SQL運(yùn)行的效率。查詢優(yōu)化最為關(guān)鍵的是從服務(wù)器內(nèi)獲得相應(yīng)數(shù)據(jù),并不是按照順序進(jìn)行全部內(nèi)容讀取。
關(guān)系數(shù)據(jù)庫查詢優(yōu)化要按照如下原則來進(jìn)行:①要盡量的先進(jìn)行選擇運(yùn)算的操作,然后能夠獲得相對比較小的中間結(jié)果;②把多個選擇與投影操作要同時執(zhí)行,能夠避免分次掃描文件而導(dǎo)致效率較低;③投影操作應(yīng)該根據(jù)雙目核算的方式來進(jìn)行;④把笛卡兒積和其后的選擇運(yùn)算合并,能夠有效的縮短時間;⑤如果是文件要連接則要合理進(jìn)行排序或者索引,能夠有效對應(yīng)各個關(guān)系;⑥按照小關(guān)系運(yùn)算優(yōu)化處理的原則,減少中間結(jié)果;⑦把表內(nèi)和查詢結(jié)果沒有關(guān)系的屬性全部剔除,能夠減少中間結(jié)果的數(shù)量;⑧提取公共表達(dá)式,根據(jù)要求預(yù)先保存,可以防止出現(xiàn)重復(fù)計算,縮短時間。
上述原則的應(yīng)用能夠提升查詢速度,但是很多條件之下,要經(jīng)過多次反復(fù)試驗(yàn)才能確定最為合理的實(shí)施方案。測試是最有效的方式,可以把相同功能的不同SQL語句執(zhí)行情況進(jìn)行考察分析,但是數(shù)據(jù)庫內(nèi)數(shù)據(jù)量很少,無法通過比較實(shí)現(xiàn),應(yīng)該查看執(zhí)行計劃,就能夠把相同功能的多條SQL語句全部都輸入到系統(tǒng)內(nèi),然后再按CTRL+L查看所利用的索引表掃描次數(shù)。
5結(jié)束語
數(shù)據(jù)庫設(shè)計的水平,會直接影響管理系統(tǒng)的各項功能,而數(shù)據(jù)庫優(yōu)化則是進(jìn)行水平分析的重要指標(biāo)。因此,在數(shù)據(jù)庫優(yōu)化中,應(yīng)該重視各項措施的應(yīng)用,做好各個方面問題的考慮與分析,但是因?yàn)槠溆绊懸蛩乇容^多,所以在設(shè)計中還會存在很多矛盾。這就需要綜合使用各種數(shù)據(jù)庫設(shè)計方式,以提升數(shù)據(jù)庫的性能,達(dá)到最優(yōu)化的應(yīng)用效果,使得系統(tǒng)開發(fā)效率和質(zhì)量得以有效的提升。
參考文獻(xiàn):
[1]?? 張欣.基于SQL標(biāo)準(zhǔn)的關(guān)系數(shù)據(jù)庫查詢優(yōu)化技術(shù)研究[J].煤炭技術(shù)(12):284-286.
[2]?? 肖輝輝,段艷明.關(guān)系數(shù)據(jù)庫SQL語句的設(shè)計優(yōu)化研究[J].軟件導(dǎo)刊,2010,09(012):177-179.
[3]?? 龔成鵬.基于關(guān)系型數(shù)據(jù)庫中SQL語句優(yōu)化規(guī)則的研究[D].2019.
作者簡介:
佘雅婷(1991年9月)女,漢,河南省鄭州市,當(dāng)前職務(wù):專員,當(dāng)前職稱:助理工程師,學(xué)歷:研究生.