SQL語句的優化是將性能低下的SQL語句轉換成目的相同的性能優異的SQL語句。程序員
人工智能自動SQL優化就是使用人工智能技術,自動對SQL語句進行重寫,從而找到性能最好的等效SQL語句。數據庫
數據庫性能的優化編程
一個數據庫系統的生命週期能夠分紅:設計、開發和成品三個階段。在設計階段進行數據庫性能優化的成本最低,收益最大。在成品階段進行數據庫性能優化的成本最高,收益最小。性能優化
數據庫的優化一般能夠經過對網絡、硬件、操做系統、數據庫參數和應用程序的優化來進行。最多見的優化手段就是對硬件的升級。根據統計,對網絡、硬件、操做系統、數據庫參數進行優化所得到的性能提高,所有加起來只佔數據庫系統性能提高的40%左右,其他的60%系統性能提高來自對應用程序的優化。許多優化專家認爲,對應用程序的優化能夠獲得80%的系統性能的提高。網絡
應用程序的優化工具
應用程序的優化一般可分爲兩個方面:源代碼和SQL語句。因爲涉及到對程序邏輯的改變,源代碼的優化在時間成本和風險上代價很高,而對數據庫系統性能的提高收效有限。oop
爲何要優化SQL語句性能
. SQL語句是對數據庫進行操做的唯一途徑,對數據庫系統的性能起着決定性的做用。學習
. SQL語句消耗了70%至90%的數據庫資源。測試
. SQL語句獨立於程序設計邏輯,對SQL語句進行優化不會影響程序邏輯。
. SQL語句有不一樣的寫法,在性能上的差別很是大。
. SQL語句易學,但難精通。
優化SQL語句的傳統方法是經過手工重寫來對SQL語句進行優化。DBA或資深程序員經過對SQL語句執行計劃的分析,依靠經驗,嘗試重寫SQL語句,而後對結果和性能進行比較,以試圖找到性能較佳的SQL語句。這種傳統上的做法沒法找出SQL語句的全部可能寫法,且依賴於人的經驗,很是耗費時間。
SQL優化技術的發展歷程
第一代SQL優化工具是執行計劃分析工具。這類工具針對輸入的SQL語句,從數據庫提取執行計劃,並解釋執行計劃中關鍵字的含義。
第二代SQL優化工具只能提供增長索引的建議,它經過對輸入的SQL語句的執行計劃的分析,來產生是否要增長索引的建議。
第三代SQL優化工具不只分析輸入SQL語句的執行計劃,還對輸入的SQL語句自己進行語法分析,通過分析產生寫法上的改進建議。
人工智能自動SQL優化
圖1 人工智能自動SQL優化示意圖
人工智能自動SQL優化出如今90年代末。目前在商用數據庫領域,LECCO Technology Limited(靈高科研有限公司)擁有該技術,並提供使用該技術的自動優化產品LECCO SQL Expert,它支持Oracle、Sybase、MS SQL Server和IBM DB2數據庫平臺。該產品針對數據庫應用的開發和維護階段提供的模塊有:SQL語法優化器、PL/SQL集成化開發調試環境(IDE)、掃描器、數據庫監視器等。其核心模塊SQL 語法優化器的工做原理爲:①輸入一條源SQL語句;②「人工智能反饋式搜索引擎」對輸入的SQL語句,結合檢測到的數據庫結構和索引進行重寫,產生N條等效的SQL語句輸出;③產生的N條等效SQL語句再送入「人工智能反饋式搜索引擎」進行重寫,直至沒法產生新的輸出或搜索限額滿;④對輸出的SQL語句進行過濾,選出具備不一樣執行計劃的SQL語句;⑤對獲得的SQL語句進行批量測試,找出性能最好的SQL語句。
LECCO SQL Expert自動優化實例
假設咱們從源代碼中抽取出這條SQL語句(也能夠經過內帶的掃描器或監視器得到SQL語句):
SELECT COUNT(*)
FROM EMPLOYEE
swheresEXISTS (SELECT 'X'
FROM DEPARTMENT
swheresEMP_DEPT=DPT_ID
AND DPT_NAME LIKE 'AC%')
AND EMP_ID IN (SELECT SAL_EMP_ID
FROM EMP_SAL_HIST B
swheresSAL_SALARY > 70000)
按下「優化」按鈕後,通過10幾秒,SQL Expert就完成了優化的過程,並在這10幾秒的時間裏重寫產生了2267 條等價的SQL語句,其中136條SQL語句有不一樣的執行計劃。
接下來,咱們能夠對自動重寫產生的136條SQL語句進行批運行測試,以選出性能最佳的等效SQL語句。按下「批運行」 按鈕,在「終止條件」 頁選擇「最佳運行時間SQL語句」,按「肯定」。
通過幾分鐘的測試運行後,咱們能夠發現SQL124的運行時間和反應時間最短。運行速度約有22.75倍的提高(源SQL語句運行時間爲2.73秒,SQL124運行時間爲0.12秒)。如今咱們就能夠把SQL124放入源代碼中,結束一條SQL語句的優化工做了。
「邊作邊學式訓練」提高SQL開發水平
LECCO SQL Expert不只可以找到最佳的SQL語句,它所提供的「邊作邊學式訓練」還可以教開發人員和數據庫管理員如何寫出性能最好的SQL語句。LECCO SQL Expert的「SQL比較器」能夠標明源SQL和待選SQL間的不一樣之處。
以上面優化的結果爲例,爲了查看源SQL語句和SQL124在寫法上有什麼不一樣,咱們能夠按下「比較器」 按鈕,對SQL124和源SQL語句進行比較。「SQL 比較器」將SQL124相對於源SQL語句的不一樣之處以藍顏色表示了出來。若是選擇「雙向比較」複選框,「SQL 比較器」能夠將兩條SQL語句的不一樣之處以藍色表示。固然,咱們也能夠從源語句和重寫後的SQL 語句中任選兩條進行比較。
從比較的結果能夠看到,重寫後的SQL124把第一個Exists改寫成了In;在字段DPT_ID上進行了合併空字符串的操做,以誘導數據庫先執行子查詢中的
(SELECT DPT_ID||''
FROM DEPARTMENT
WHERE DPT_NAME LIKE 'AC%')
在子查詢完成後,再與EMPLOYEE表進行嵌套循環鏈接(Nested Loop Join)。
若是以爲對寫法的改變難以理解,還能夠點中「執行計劃」複選框,經過比較兩條SQL語句的執行計劃的不一樣,來了解其中的差別。在查看執行計劃過程當中,若是有什麼不明白的地方,能夠點中「SQL信息按鈕」,再點擊執行計劃看不明白的地方,LECCO SQL Expert的上下文敏感幫助系統將提供執行計劃該處的解釋。
在「SQL比較器」中,選中「統計信息」複選框後,可獲得詳細的兩條SQL語句運行時的統計信息比較,這對於學習不一樣的SQL寫法對數據庫資源的消耗頗有幫助。
LECCO SQL Expert優化模塊的特色
LECCO SQL Expert優化模塊的特色主要表現爲:自動優化SQL語句;以獨家的人工智能知識庫「反饋式搜索引擎」來重寫性能優異的SQL語句;找出全部等效的SQL語句及可能的執行計劃;保證產生相同的結果;先進的SQL語法分析器能處理最複雜的SQL語句;能夠重寫SELECT、SELECT INTO、UPDATE、INSERT和DELETE語句;經過測試運行,爲應用程序和數據庫自動找到性能最好的SQL語句;提供微秒級的計時,可以優化Web應用程序和有大量用戶的在線事務處理中運行時間很短的SQL語句;爲開發人員提供「邊作邊學式訓練」,迅速提升開發人員的SQL編程技能;提供上下文敏感的執行計劃幫助系統和SQL運行狀態幫助;不是猜想或建議,而是獨一無二的SQL重寫解決方案。
寫出專家級的SQL語句
LECCO SQL Expert的出現,使SQL的優化變得極其簡單,只要可以寫出SQL語句,它就能幫用戶找到最好性能的寫法。LECCO SQL Expert不只能在很短的時間內找到全部可能的優化方案,並且可以經過實際測試,肯定最有效的優化方案。同以往的數據庫優化手段相比較,LECCO SQL Expert將數據庫優化技術帶到了一個嶄新的技術高度,依賴人的經驗、耗費大量時間、受人的思惟束縛的數據庫優化手段已經被高效、省時且準確的自動優化軟件所取代了。經過內建的「LECCO小助手」的幫助,即便是SQL的開發新手,也能快速且簡單地寫出專家級的SQL語句。