應用程序的優化通常可分為兩個方面:源代碼的優化和SQL語句的優化。源代碼的優化在時間成本和風險上代價很高;另一方面,源代碼的優化對數據庫系統性能的提升收效有限。
優化的理由
1)SQL語句是對數據庫(數據)進行操作的惟一途徑;
2)SQL語句消耗了70%~90%的數據庫資源;
3)SQL語句獨立於程序設計邏輯,相對於對程序源代碼的優化,對SQL語句的優化在時間成本和風險上的代價都很低;
4)SQL語句可以有不同的寫法;
5)SQL語句易學,難精通。
優化技術的發展
第一代的SQL優化工具是執行計劃分析工具。這類的工具對輸入的SQL語句從數據庫提取執行計劃,並解釋執行計劃中關鍵字的含義;第二代的SQL優化工具只能提供增加索引的建議,它通過對輸入的SQL語句的執行計劃的分析來產生是否要增加索引的建議。該類工具存在著致命的缺點——只分析了一條SQL語句就得出增加某個索引的結論,根本不理會(實際上也無法評估到)增加的索引對整體數據庫系統性能的影響。其破壞性在於:
1、不理會增加的索引對其他增、刪、改SQL語句的負面影響;
2、沒有考慮增加的索引可能導致數據庫判斷失誤;
3、對由於增加索引引起的數據庫系統負擔忽略不計。
同時,這些工具由於技術水平的限制存在著以下缺點:
1、無法保證建議或改寫的正確性;
2、無法進行重寫,僅僅提供了建議或有限程度的改寫,重寫工作還是需要人工完成,優化工作所需的時間和工作量同人工進行優化差不多;
3、改寫的規則和Hints有限,難以處理復雜的SQL語句;
4、必須人手逐條進行測試。
這類工具曾經盛極一時,直到人工智能自動SQL優化的出現。