国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

SQL語句的自動優(yōu)化

2024-07-21 02:31:06
字體:
供稿:網(wǎng)友

在數(shù)據(jù)庫應(yīng)用系統(tǒng)中編寫可執(zhí)行的SQL語句可以有多種方式實現(xiàn),但哪一條是最佳方案卻難以確定。為了解決這一問題,有必要對SQL實施優(yōu)化。簡單地說,SQL語句的優(yōu)化就是將性能低下的SQL語句轉(zhuǎn)換成達到同樣目的的性能更好的SQL語句。

優(yōu)化SQL語句的原因

數(shù)據(jù)庫系統(tǒng)的生命周期可以分成: 設(shè)計、開發(fā)和成品三個階段。在設(shè)計階段進行優(yōu)化的成本最低,收益最大。在成品階段進行優(yōu)化的成本最高,收益最小。如果將一個數(shù)據(jù)庫系統(tǒng)比喻成一座樓房,在樓房建好后進行矯正往往成本很高而收效很小(甚至可能根本無法矯正),而在樓房設(shè)計、生產(chǎn)階段控制好每塊磚瓦的質(zhì)量就能達到花費小而見效高的目的。

為了獲得最大效益,人們常需要對數(shù)據(jù)庫進行優(yōu)化。數(shù)據(jù)庫的優(yōu)化通常可以通過對網(wǎng)絡(luò)、硬件、操作系統(tǒng)、數(shù)據(jù)庫參數(shù)和應(yīng)用程序的優(yōu)化來進行。根據(jù)統(tǒng)計,對網(wǎng)絡(luò)、硬件、操作系統(tǒng)、數(shù)據(jù)庫參數(shù)進行優(yōu)化所獲得的性能提升全部加起來只占數(shù)據(jù)庫應(yīng)用系統(tǒng)性能提升的40%左右,其余60%的系統(tǒng)性能提升全部來自對應(yīng)用程序的優(yōu)化。許多優(yōu)化專家甚至認為對應(yīng)用程序的優(yōu)化可以得到80%的系統(tǒng)性能提升。因此可以肯定,通過優(yōu)化應(yīng)用程序來對數(shù)據(jù)庫系統(tǒng)進行優(yōu)化能獲得更大的收益。

對應(yīng)用程序的優(yōu)化通常可分為兩個方面: 源代碼的優(yōu)化和SQL語句的優(yōu)化。由于涉及到對程序邏輯的改變,源代碼的優(yōu)化在時間成本和風(fēng)險上代價很高(尤其是對正在使用中的系統(tǒng)進行優(yōu)化) 。另一方面,源代碼的優(yōu)化對數(shù)據(jù)庫系統(tǒng)性能的提升收效有限,因為應(yīng)用程序?qū)?shù)據(jù)庫的操作最終要表現(xiàn)為SQL語句對數(shù)據(jù)庫的操作。

對SQL語句進行優(yōu)化有以下一些直接原因:

1. SQL語句是對數(shù)據(jù)庫(數(shù)據(jù)) 進行操作的惟一途徑,應(yīng)用程序的執(zhí)行最終要歸結(jié)為SQL語句的執(zhí)行,SQL語句的效率對數(shù)據(jù)庫系統(tǒng)的性能起到了決定性的作用。

2. SQL語句消耗了70%~90%的數(shù)據(jù)庫資源。

3. SQL語句獨立于程序設(shè)計邏輯,對SQL語句進行優(yōu)化不會影響程序邏輯,相對于對程序源代碼的優(yōu)化,對SQL語句的優(yōu)化在時間成本和風(fēng)險上的代價都很低。

4. SQL語句可以有不同的寫法,不同的寫法在性能上的差異可能很大。

5. SQL語句易學(xué),難精通。SQL語句的性能往往同實際運行系統(tǒng)的數(shù)據(jù)庫結(jié)構(gòu)、記錄數(shù)量等有關(guān),不存在普遍適用的規(guī)律來提升性能。

傳統(tǒng)的優(yōu)化方法

SQL程序人員在傳統(tǒng)上采用手工重寫來對SQL語句進行優(yōu)化。這主要依靠DBA或資深程序員對SQL語句執(zhí)行計劃的分析,依靠經(jīng)驗,嘗試重寫SQL語句,然后對結(jié)果和性能進行比較以試圖找到性能較佳的SQL語句。這種做法存在著以下不足:

1. 無法找出SQL語句的所有可能寫法。很可能花費了大量的時間也無法找到性能較佳的SQL語句。即便找到了某個性能較佳的SQL語句也無法知道是否存在性能更好的寫法。

2. 非常依賴于人的經(jīng)驗,經(jīng)驗的多寡往往決定了優(yōu)化后SQL語句的性能。

3. 非常耗時間。重寫-->校驗正確性-->比較性能,這一循環(huán)過程需要大量的時間。

根據(jù)傳統(tǒng)的SQL優(yōu)化工具的功能,人們一般將優(yōu)化工具分為以下三代產(chǎn)品:

第一代的SQL優(yōu)化工具是執(zhí)行計劃分析工具。這類工具對輸入的SQL語句從數(shù)據(jù)庫提取執(zhí)行計劃,并解釋執(zhí)行計劃中關(guān)鍵字的含義。

第二代的SQL優(yōu)化工具只能提供增加索引的建議,它通過對輸入的SQL語句的執(zhí)行計劃的分析來產(chǎn)生是否要增加索引的建議。這類工具存在著致命的缺點——只分析了一條SQL語句就得出增加某個索引的結(jié)論,根本不理會(實際上也無法評估到)增加的索引對整體數(shù)據(jù)庫系統(tǒng)性能的影響。

第三代工具是利用人工智能實現(xiàn)自動SQL優(yōu)化。

人工智能自動SQL優(yōu)化

隨著人工智能技術(shù)的發(fā)展和在數(shù)據(jù)庫優(yōu)化領(lǐng)域應(yīng)用的深入,在20世紀90年代末優(yōu)化技術(shù)取得了突破性的進展,出現(xiàn)了人工智能自動SQL優(yōu)化。人工智能自動SQL優(yōu)化的本質(zhì)就是借助人工智能技術(shù),自動對SQL語句進行重寫,找到性能最好的等效SQL語句。LECCO SQL Expert就采用了這種人工智能技術(shù),其SQL Expert支持Oracle、Sybase、MS SQL Server和IBM DB2數(shù)據(jù)庫平臺。其突出特點是自動優(yōu)化SQL語句。除此以外,還可以以人工智能知識庫“反饋式搜索引擎”來重寫SQL語句,并找出所有等效的SQL語句及可能的執(zhí)行計劃,通過測試運行為應(yīng)用程序和數(shù)據(jù)庫自動找到性能最好的SQL語句,提供微秒級的計時; 能夠優(yōu)化Web應(yīng)用程序和有大量用戶的在線事務(wù)處理中運行時間很短的SQL語句; 能通過比較源SQL和待選SQL的不同之處,為開發(fā)人員提供“邊做邊學(xué)式訓(xùn)練”,迅速提高開發(fā)人員的SQL編程技能等等。

該工具針對數(shù)據(jù)庫應(yīng)用的開發(fā)和維護階段提供了數(shù)個特別的模塊:SQL語法優(yōu)化器、PL/SQL集成化開發(fā)調(diào)試環(huán)境(IDE)、掃描器、數(shù)據(jù)庫監(jiān)視器等。其核心模塊之一“SQL 語法優(yōu)化器”的工作原理大致如下:輸入一條源SQL語句,“人工智能反饋式搜索引擎”對輸入的SQL語句結(jié)合檢測到的數(shù)據(jù)庫結(jié)構(gòu)和索引進行重寫,產(chǎn)生N條等效的SQL語句輸出,產(chǎn)生的N條等效SQL語句再送入“人工智能反饋式搜索引擎”進行重寫,直至無法產(chǎn)生新的輸出或搜索限額滿,接下來對輸出的SQL語句進行過濾,選出具有不同執(zhí)行計劃的SQL語句(不同的執(zhí)行計劃意味著不同的執(zhí)行效率),最后,對得到的SQL語句進行批量測試,找出性能最好的SQL語句(參見下圖)。


圖 人工智能自動SQL優(yōu)化示意圖

LECCO SQL Expert不僅能夠找到最佳的SQL語句,它所提供的“邊做邊學(xué)式訓(xùn)練”還能夠教會開發(fā)人員和數(shù)據(jù)庫管理員如何寫出性能最好的SQL語句。LECCO SQL Expert的SQL語句自動優(yōu)化功能使SQL的優(yōu)化變得極其簡單,只要能夠?qū)懗鯯QL語句,它就能幫開發(fā)人員找到最好性能的寫法。

小 結(jié)

SQL語句是數(shù)據(jù)庫應(yīng)用中一個非常關(guān)鍵的部分,它執(zhí)行性能的高低直接影響著應(yīng)用程序的運行效率。正因為如此,人們在SQL語句的優(yōu)化上投入了很大的精力,出現(xiàn)了許多SQL語句優(yōu)化工具。隨著人工智能等相關(guān)技術(shù)的日益成熟, 肯定還會有更多更好的工具出現(xiàn),這將會給開發(fā)人員提供更多的幫助。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 柳河县| 昭平县| 房山区| 宜兰县| 洛南县| 合肥市| 兴业县| 北海市| 韩城市| 文安县| 米林县| 临漳县| 佛学| 榕江县| 阿鲁科尔沁旗| 克东县| 防城港市| 铜梁县| 铅山县| 扎鲁特旗| 三江| 同德县| 仪征市| 星座| 张家口市| 大竹县| 牟定县| 垫江县| 敦化市| 噶尔县| 玉溪市| 宽城| 潮安县| 凤台县| 富蕴县| 盈江县| 喜德县| 晋江市| 汕头市| 什邡市| 大石桥市|