程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> sql優化器探討

sql優化器探討

編輯:關於SqlServer

多年以來,商業數據庫生產商一直致力於提高數據庫的查詢性能。盡管他們持續地付出努力和辛勤地工作,我們還是無法看到關系型數據庫系統(rdbms)在性能上有顯著的提高。用戶繼續忍受性能低下的sql語句,數據庫專家們繼續在sql語句優化的泥潭中痛苦掙扎。

本文將介紹數據庫查詢優化器是如何工作的、為什麼問題持續存在,並深入探討數據庫查詢優化器將來的發展方向。

數據庫查詢優化器

數據庫查詢優化器是rdbms服務器的一個組成部分。對於基於成本的優化,數據庫查詢優化器的任務是,通過產生可供選擇的執行計劃,找到最低估算成本的執行計劃,來優化一條sql語句。它在sql語句性能表現上扮演了至關重要的角色。

當一條sql語句被送入rdbms服務器,它將會被解析並提交給數據庫查詢優化器。查詢優化器將會進行查詢重寫和表達式評估,以產生可供選擇的執行計劃。產生可供選擇的執行計劃的數量,取決於在rdbms中定義的計劃空間(planspace)大小。對於每個待選的執行計劃,成本估計將被計算,帶有最小成本的執行計劃將被選取用來執行sql語句。這種方法存在著兩個無法解決的問題:無法產生全部可能的可選執行計劃和成本估計的不准確。

新的sql優化概念——外部sql重寫器

一個有經驗的程序員,把有問題的sql語句的速度提高數千倍是很常見的。憑著對具體數據庫特征的了解,對sql語句進行語法的重新構造。一個開發人員能夠幫助查詢優化器獲得更好的執行計劃,而這執行計劃是查詢優化器無法靠自身獨立工作產生的。這給予我們一個啟示,我們是否能通過計算機模擬人的行為,來實現同樣的目的呢?

顯示了外部sql重寫器(externalsqlrewriter--esr)的概念,它能夠基於現有數據庫的特性,產生語義相等但語法不同的sql語句。重寫產生的sql語句,將取代程序源代碼中的源sql語句。這樣,當程序運行時(使用新的sql語句),查詢優化器將會被影響,而產生性能更好的執行計劃。事實上,有經驗的程序員和數據庫管理員,一直在期盼著這個概念的出現。這個概念的新穎之處在於,將人類的知識和智能合並到一個計算機算法中,它能夠打破計劃空間(planspace)限制的障礙,避免在尋找最佳sql語句時不准確的成本估算。

esr的優點是,它的優化並非一個基於實時,可用於重寫和優化sql語句的時間,在理論上是無限的。它可以比數據庫的查詢優化器嘗試更多的待選sql語句。用戶花費多達一天的時間來處理關鍵sql語句的性能問題,而esr可以徹底尋找可能的待選執行計劃。esr的另外一個優點是,能夠達到sql性能提高的目的,而無需進行額外的統計,使數據庫查詢優化器的負載過重。因此,esr使得提升整個數據庫性能變得簡單且安全。最後,esr相對於數據庫內部的查詢優化器更加靈活:sql重寫的知識庫可以很容易擴展,搜索空間可以通過硬件的升級來擴展,而毫無限制和缺點。

esr是如何工作的?

為了讓esr能夠優化sql語句,必須避免數據庫內部查詢優化器限制所產生的障礙。另外,esr必須擁有重寫sql語句的智能,並知道你數據庫的特性,來提供待選的sql語句。盡管達到上面的要求是困難的,但是開發一個這樣的算法也不是不可能的。國內市場上已經由盈動華建公司代理推出了一個相當成熟的產品——leccotechnology的leccosqlexpert。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved