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