李佳鐵嶺衛生職業學院信息技術教研室
談SQL Server數據庫的性能優化
李佳
鐵嶺衛生職業學院信息技術教研室
在當前這個數據化、信息化的時代下,數據信息的存儲成為了一個關鍵的問題。由于數據信惠量的不斷增多,以及數據信息之間的關系日益復雜,所以傳統以人工的方式進行數據管理,在今天已經完全不使用,取而代之的是數據庫來幫助人們進行數據信息的存儲與管理。數據庫最早出現在上世紀的五十年代早期,發展至今日,它已經得到了非常廣泛的應用,而且相關的技術與理念較早期相比,也越來越成熟。在數據庫的應用過程當中,必須要重視其性能的優化與發揮,這樣才能提高數據庫信息存儲與管理的效率。本文基于作者自身對數據庫的認識與應用經驗,主要SQI Server數據庫為例,對如何進行數據庫性能優化提出了部分探討性建議。
SQL Server 數據庫性能優化
數據庫是一種能夠高效存儲、管理、挖掘以及分享數據信息的軟件,在當前這個數據化、信息化的時代下,各行各業都必須要應用到數據庫, 因此研究與探討如何提高數據庫的性能就具有重要的作用有意義。
1.1 提升運行效率
之所以要采用數據庫代替人工進行數據存儲與管理,一個非常重要的原因就是數據越多,人工效率就越慢,而如今的數據又越來越多,所以人工數據管理的方式注定被淘汰。人們之所以選擇數據庫來代替人工進行數據管理,就是因為數據庫的效率比人工高出很多,看中的就是數據庫的效率。不過,如果對數據庫的應用不合理,就會降低數據庫的運行效率,這就違背了人們選擇數據庫的初衷,因此必須要通過優化數據庫性能,來保障與提升數據庫的運行效率。
1.2 提高用戶體驗
如今,人們通過互聯網訪問數據庫的操作越來越多,例如人們在網上購物的時候,有許多的數據信息都會從數據庫中提取出來,如果數據庫的性能低,就會導致用戶獲得數據信息的時間延長,降低用戶體驗,造成用戶流失。因此,必須要通過優化數據庫性能,縮短用戶獲得數據信息的時間,提高用戶體驗,來留住用戶,保住效益[2]。
1.3 減少不必要的硬件開銷
數據庫的運行是基于硬件的,如果數據庫的性能過低,就必須要求更多的硬件作為支撐,從而加大數據庫的成本開銷。因此,必須要通過優化數據庫性能,在有限的硬件平臺上,發揮出高效的運行效率,以減少不必要的硬件開銷。
2.1 數據庫表的優化
在進行數據庫表的設計時,首先要遵循標準化、規范化的基本原則,如3NF標準(第三范式),這能夠在一定程度上降低數據庫的數據冗余程度,有助于數據庫的系統擴展,提高數據庫的性能:其次,要盡可能減少對硬性編碼的應用,而應當多用數據驅動,因為前者過于死板,既不利于擴展也不利于維護;第三,表索引的設計與選擇也對數據庫性能的影響非常大,所以必須要重視這個問題,并采用妥善的方法進行索引設計,這樣才能使數據庫的整體性能得到保障。
在簇索引(Clustered Index)的設計與建立上, 由于每一張數據庫基本表都最多只能具有一個簇索引, 且這個索引所決定的是數據信息存儲的物理順序, 所以必須要在建立非簇索引之前將簇索引建立起來, 同時還要在建立簇索引的過程當中,應遵循以下原則:
a.包含較多完全不同數據的列:
b.返回大量結果的查詢;
c.使用“BETwEEN”及關系運算符返回的查詢:
d.需要對單個的行進行快速掃描的OLTP類型的應用;
e.經常被包含有連接或GROUP BY子句查詢進行訪問的列。而對于經常作更新和較寬的鍵值,則不適合選擇簇索引[2]。
在非簇索引(Nonclustered Index)的設計與建立上,要考慮到它與簇索引的不同,簇索引影響著數據信息存儲的物理位置,而非簇索引則與數據信息的物理位置無關, 同時非簇索引只存放數據行的引用。所以,非簇索引需要存放在一個堆上或簇索引上。在實際的數據庫應用過程當中,只要有需要通過不同的途徑來進行數據搜索,通過建立非簇索引,就能夠在很大程度上提升數據搜索速度,增強數據庫性能。在實際的操作中,在符合以下條件的情況下,都可以建立非簇索引:
a.不會返回大量結果的查詢:
b.經常在返回精確匹配的條件查詢被引用的列;
c.包含大量完全不同數據的列,并且在某個列上己建立了簇索引;
d.系統應用中經常使用分組和連接:
e.覆蓋整個表的所有列的查詢。值得一提的是,雖然通過建立索引能夠提高數據庫的性能,但是這也會增加一部分的空間與時問開銷,所以在索引的設計過程當中,必須要考慮到建立索引能夠得到的優化程度是否可以超過其開銷,要避免建立無效索引,如果建立索引的負面影響確實過大, 可以通過使用臨時表來增強數據庫性能。
2.2 其它對象的存放優化
在數據庫當中,除了主要的基本表之外,還有多種其他對象,這些對象的存放也影響著數據庫的性能, 因此必須要重視對數據庫其它對象的存放優化。首先, 大型系統通常使用多個磁盤,要避免系統I/0瓶頸,就要充分利用硬件系統的并行I /0機制, 因此數據存放應跨越多個設備,不同性質訪問的數據要分別存放;其次,大型信息系統的事務日志是影響系統性能的重要環節之一,無論是從減少系統開銷角度,還是從系統障礙恢復的角度出發, 都應存放在單獨的磁盤上,即將系統的日志文件與數據文件分開存儲;第三,將訪問頻度高低不同的表分別存儲,可以充分利用系統的并行機制,提高系統的I/0性能。
2.3 數據庫查詢優化
在一個數據庫當中,被執行最多的操作就是查詢,因為數據庫的存在最主要的目的就是存放數據信息,并在需要時快速、準確的對相關數據信息進行調閱或處理,所以查詢效率是評價數據庫性能的一個重要指標。
在實際的查詢過程當中,已經當從以下幾個方面來對查詢進行優化:
a.相比于普通的SOL查詢語句而言,存儲過程的效率更高,所以應當盡可能的使用存儲過程:
b.合理使用查詢優化器的自動優化功能,這同樣能夠提高查詢效率;
c.合理的應用臨時表,盡可能不要進行大量排序:
d.限制對游標的使用;
e.在where子旬當中,最好是不要應用“僳”連接,也不要使用其他復雜的表達式;
f.合理的使用批處理語句。
2.4 鎖的優化
一般情況下,數據庫都是對若干用戶共同開放的,但是在多個用戶同時查詢或操作同一條數據信息時,就可能會出現數據的一致性與完整性受到破壞,因此必須要有一個機制來確保多用戶同時查詢或操作同一條數據信息時的數據一致性與完整性,這就是數據庫鎖。鎖的使用雖然能夠起到保護數據信息安全的作用,但使用不合理則會影響到數據庫的性能,因此必須要注意以下兩點問題:
a.根據實際問題對長事務進行分解,從而有效減少排它鎖的占用時間;
b.充分利用批處理語句,減少在事務執行過程中的交互,避免人為控制事務的長短;
c.對于訪問頻繁、并發度較高的數據庫應用系統,可采用相應的優化措施從而避免死鎖,如:對每個查詢使用超時機制、使用帶約束的連接、適度平衡使用行鎖、頁鎖及表鎖等,從而有效避免死鎖。
數據庫是存儲和管理數據信息的一個重要平臺,必須要積極探討與實踐如何優化數據庫性能,提高數據庫運行效率,將數據庫的優勢全面發揮出來,進一步推動當前的數據化、信息化發展。
[1]沈海峰.關于如何優化SQL數據庫的性能的幾點分析[J].電腦知識與技術,2012,03:517—518.
[2]甘潔靜.SQL數據庫的建立與管理[J].計算機光盤軟件與應用,2012,04:109—110.
[3]陳忠菊.SQLServer數據庫應用技巧探討[J].電腦編程技巧與維護,2014,18:45.
[4]雷琳.SQL查詢語句優化的研究[J].武漢船舶職業技術學院學報,2011,03:31—33