陳潔+祝永健
【摘要】 隨著網絡技術的發展,數據庫應用系統也不斷擴展,數據量不斷增加,對數據庫性能進行優化,提高效率成為了數據庫應用中的重要問題。因此,本文以常用的SQL Server數據庫作為探討對象,從數據庫索引的有效利用、SQL語句的改善及SQL Server的分區三方面對SQL Server數據庫性能優化提出分析意見。
【關鍵詞】 SQL Server 數據庫 性能優化
隨著數據庫應用系統的不斷擴展,數據庫用戶數量的不斷增多,需要處理的業務數據量在不斷增加,數據庫海量數據存儲在迅速增長,數據庫性能的好壞變得越來越重要。數據量的快速增長是數據庫性能優化研究的主要驅動力,在當前已有的軟硬件基礎之上,如何在數據庫應用系統中獲得最大的吞吐量和提高系統的處理能力是目前數據庫應用系統的一個研究熱點。
一般情況下,數據庫的優化指的就是查詢性能的優化,讓數據庫對查詢的響應盡可能的快。僅對數據庫系統本身而言,影響到查詢性能的因素從理論上來講包括數據庫參數設置,索引,分區,SQL語句。
一、有效的利用索引
索引在數據庫的查詢優化中起著至關重要的作用,一個數據庫索引的好與壞,其查詢性能相差很多倍。如何選擇索引可顯著影響所產生的磁盤 I/O,并因而影響查詢性能。常用的索引有聚集索引、非聚集索引,對于非聚集索引,選擇性很重要,因為如果在只有少量唯一值的大型表上創建非聚集索引,使用非聚集索引將不會節省數據檢索中的 I/O。因為數據庫中的索引都注重一種比較性,這樣它可以快速的確定范圍,定位位置,例如,某表的性別字段,非男即女,不具有可比性,如果以它為非聚集索引,查詢的時候也只能一個個節點去比較。
在這種情況下產生的 I/O 可能比對表進行連續掃描所產生的 I/O 多得多。比較適合非聚集索引的有票據編號、唯一的客戶編號、社會安全號碼和電話號碼,簡單來說,就是基于某種可比較的,有規律的數據。
索引對于檢索性能的提高有一定的幫助,但是更多的索引或是不正確的一定程度上會導致系統低效。由于用戶在每次向表中添加一個索引時,數據庫就得相對的做更多的工作。太多的索引甚至會產生索引碎片。因此,我們才需要建立一個“適當”的索引體系,尤其是在創建聚集索引的時候,更應該精益求精,確保數據庫能夠得到高性能的發揮。
二、有效改善SQL語句
SQL的語句大概有編譯優化、執行、取值三個階段,而第一階段編譯優化絕大多數情況下都要花掉60%的時間,所以變量的綁定是尤為重要的,SQL Server數據庫有緩存區,存放一些最近使用過的SQL語句,當有一條SQL語句到達數據庫服務器時,首先數據庫會搜索緩存區,看它是否存在可以重用的SQL語句,如果存在,可以不用編譯優化,因為緩存區里都是編譯優化好了的SQL語句,直接可以執行,節約很多時間。
如果沒有發現可以重用的SQL語句,則必須要完全經過語句編譯分析,優化計劃,安全檢查等過程,這不僅僅會大量耗費CPU功率,而且還在相當長的一段時間內鎖住了一部分數據庫緩存,這樣執行SQL語句的人越多,等待的時間越長,系統的性能會大幅度的下降。
三、合理利用SQL Server的分區
SQL Server的分區在一些超大型的表中是有著非常重要的作用。分區是邏輯上的一種區分,在數據訪問的情況下,由于一個表就是一個整體,所以也就是對整個表或整個表的索引進行了訪問,所謂分區,通俗點講,就是把表按一定的規律劃分成更小的邏輯單位,在進行數據訪問的時候,不以表為單位進行訪問,而是在表的基礎上,判斷數據在哪個分區,然后對特定的分區進行訪問。正確的分區對于提高查詢性能有很大的作用。例如,有一個非常大的表,存儲了一些銷售記錄,現在查詢總是按銷售季度來執行這個查詢,而每個銷售季度包含幾十萬個記錄,通常你只是要查詢這個數據集的一個相當小的數據,但是給予銷售季度的檢索卻的確是不太可行的。
這個索引可能指向無數個記錄,而以這種方式執行索引范圍掃描是可怕的。為了處理許多查詢任務,系統需要執行全表掃描,但是結果卻必須掃描幾百萬個記錄,其中絕大部分不使用我們的查詢任務。使用智能分區方案,就可以按季度隔離數據。這樣當我們為任意指定的季度去查詢數據時,結果將只是掃描那個季度的數據。這是所有可能的解決方案中最好的方案。
數據庫優化是一個很廣的范圍,涉及到的東西也比較多,并且每個特定的數據庫,其具體的優化過程也是不一樣的。因為優化的很大一部分最終都要跟具體的數據庫系統細節打交道,在此只能就常用的數據庫以及經常用到的的東西進行一些分析,以期使數據庫系統的效率得到提升,方便我們的使用。
參 考 文 獻
[1]楊柳. SQL SERVER 數據庫的性能分析與優化策略研究[J]. 科技創新導報2011,(1):15-19.
[2]劉芬. 關于SQL數據庫的性能優化問題的研究[J]. 軟件. 2012(06)