于麗麗/哈爾濱飛機工業集團有限責任公司
數據庫優化策略分析
于麗麗/哈爾濱飛機工業集團有限責任公司
從范式優化、索引優化和查詢優化三個方面對數據庫的優化設計方法進行分析探討。在邏輯設計階段,要按照范式優化的具體要求來設計數據庫邏輯結構,比較其優劣從而選擇更好的方案;在數據庫物理設計階段,在有關屬性或屬性的組合上建立索引時要根據索引優化中的具體要求來進行,使數據庫物理結構得以優化;在數據庫查詢階段,優化數據查詢語句,以提高SQL語句的執行效率。
數據庫;范式優化;索引優化;查詢優化
隨著數據庫應用技術的不斷發展,人們對計算機化數據的需求性越來起強。不完善的數據庫對人們日常的生活影響越來越大,這樣就照成人們對數據庫的優化設計日益關注起來。本文針對數據庫開發應用中遇到幾種問題采取合適的方法進行調整和優化,使其更加適用于們對數據庫的應用需求。
關系模式規范化的基本思想是消除關系模式中的數據冗余,消除數據依賴中的不合適的部分,解決數據插入、刪除進發生的異常現象。這就要求關系模式要滿足一定的條件。我們把關系模式規范化過程中不同程序的規范化要求設立的不同標準稱為范式。
需要符合第三范式,其原理是所有的非主屬性都不函數傳遞于主屬性。第三范式的運用,不僅避免了由于頻繁的數據備份給相關操作帶來的不利影響,而且很好的保護了數據庫的各方面性能不受到損害,使其能夠正常的運行。
運用第三范式設計數據庫時,往往力求改變數據庫的各方面性能。但是不是分解得越多越好,因為在查詢上,時間上要浪費得更多。因此,對于時常要使用的表或者相關數據,要對其結構及性能進行全面優化和調整。
索引應用于數據庫的主要目的是為了提高數據查詢的效率,而數據庫優化查詢的重要方法之一是建立索引。建立合適的數據庫系統索引,就可以避免全表掃描,并減少由于連接查詢而造成的各種多余的開銷,有效提高數據庫的查詢速度,優化了數據庫性能。然而在創建索引時也不由地增加了數據庫系統的時間和空間的開銷。所以在創建索引時應注意與實際的數據庫查詢需求相結合,這樣才能真正實現基于索引的優化數據庫。
1.索引基本概念。索引是一個單獨的、物理的數據結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單。
索引提供指向存儲在表的指定列中的數據值的指針,然后根據您指定的排序順序對這些指針排序。數據庫使用索引的方式與您使用書籍中的索引的方式很相似:它搜索索引以找到特定值,然后順指針找到包含該值的行。
2.創建合適并且高效的索引。創建合適的索引即是對所要創建的索引進行有效的邏輯判斷,使所創建的索引對數據庫的工作效率的提高有所幫助。為了實現創建合適的索引,我們得考慮以下幾點要求:在編寫SQL程序時,多注釋那些常用且對性能有影響的SQL語句,以便后來人能更好的理解并利用它,然后再判斷數據庫中哪些表中的字段要建立索引;第二,對數據庫中使用次數較多的表,數據量較大的表,較經常和其他表進行連接操作的表等,都要進行特別的關注,因為這些表上的索引將對我們所編寫的SQL語句的性能產生深遠的影響。
查詢優化是為了查詢選擇最有效的查詢計劃的過程。查詢優化一方面在關系代數級進行優化,力圖找出與給定表達式等價,但執行效率更高的一個表達式。查詢優化的另一方面涉及查詢語句處理策略的選擇,例如SQL語句的合理編寫。
1.關系代數表達式中的查詢優化。關系系統的查詢優化是關系數據庫管理系統實現的關鍵技術,又是關系系統的優點。因為,用戶只要提出“干什么”,不必指出“怎么干”。在關系代數表達式中,需要指出若干個關系的操作步驟。問題是怎樣做才能保證省時、省空間以及效率高,這就是查詢優化的問題。需要注意的是,在關系代數運算中,笛卡爾積、連接運算最費時間和空間,空間應采用什么樣的策略,能夠節省時間空間,這就是優化的準則。具體地講:
(1)提早執行選取運算;
(2)合并乘積與其后的選擇運算為連接運算;
(3)將投影運算和其前后的其他運算同時進行,以避免重復掃描關系;
(4)將投影運算和其前后的二目運算結合起來,便得沒有必要為去掉某些字段再掃描一遍關系;
(5)在執行連接前對關系做適當的預處理,就能快速地找到要連接的元組。
2.查詢優化涉及查詢語句(SQL)的處理策略。
(1)應盡可能不在where子句中使用“!=”這種不等于的操作符,因為這樣會促使引擎進行全表掃描,優化器將無法通過合理的索引方式來確定將要查詢表的行數,這將非常浪費查詢的時間和空間。
(2)應盡可能不在where子句中使用“or”操作符,這樣也會導致全表掃描而導致效率差;
(3)應盡量避免使用通配符“%”開頭的模糊查詢。
(4)應盡可能不在where子句中對字段進行表達式運算操作(如加減乘除),這也將導致引擎放棄使用索引而進行全表掃描從而降低了查詢效率。
(5)應盡可能不在where子句中對字段進行函數操作,這將導致引擎放棄使用索引而進行全表掃描從而降低了查詢效率。
(6)查詢語句中使用exists是一個比較好的編寫習慣。
(7)應盡量避免過于頻繁創建和刪除臨時表,這樣可以減少系統表資源的消耗,從而為別的基本表騰出更多的空間來進行存儲與運算。
數據庫訪問是影響現代應用程序性能和可伸縮性的一個關鍵點。雖然框架支持構建數據訪問邏輯,仍然需要對數據訪問邏輯投入相當的精力,以避免種種陷阱和問題。問題之關鍵是要理解應用程序數據訪問層的動態和特性的一切細節。優化數據庫對提高計算機系統的可用性和效率,具有非常重要的意義,特別是在數據庫設計研發階段,對邏輯結構和物理結構進行有效的優化設計,創建一個規則布局合理的數據庫,能獲得最小的系統開銷,能從根本上大大提高應用系統的整體性能,對于以后的數據庫性能調整和利用都有非常大的益處。對數據庫的優化,關系著我們對數據庫的應用是否高效。本文在對數據庫優化策略分析的基礎上提出了部分見解,有效的提高數據庫的應用。
[1]微軟公司著.SQLServer 2005數據庫開發與實現.高等教育出版社,2007年9月.
[2]陳志泊.數據庫原理及應用教程.人民郵電出版社,2008年3月.[3]吳碌莉.數據庫優化設計方法初探[J].廣西科學院學報,2005年2月.
[4]蔣文沛.SQLServer 2005實用教程。人民郵電出版社,2009年6月.