SQL SERVER性能優化綜述

一個系統的性能的提升,不僅僅是試運行或者維護階段的性能調優的任務,也不僅僅是開發階段的事情,而是在整個軟件生命週期都須要注意,進行有效工做才能達到的。因此我但願按照軟件生命週期的不一樣階段來總結數據庫性能優化相關的注意事項sql

 

1、分析階段數據庫

通常來講,在系統分析階段每每有太多須要關注的地方,系統各類功能性、可用性、可靠性、安全性需求每每吸引了咱們大部分的注意力,可是,咱們必須注意,性能是很重要的非功能性需求,必須根據系統的特色肯定其實時性需求、響應時間的需求、硬件的配置等。最好能有各類需求的量化的指標。 另外一方面,在分析階段應該根據各類需求區分出系統的類型,大的方面,區分是OLTP(聯機事務處理系統)和OLAP(聯機分析處理系統)。編程

2、設計階段緩存

設計階段能夠說是之後系統性能的關鍵階段,在這個階段,有一個關係到之後幾乎全部性能調優的過程—數據庫設計。 在數據庫設計完成後,能夠進行初步的索引設計,好的索引設計能夠指導編碼階段寫出高效率的代碼,爲整個系統的性能打下良好的基礎。安全

如下是性能要求設計階段須要注意的:性能優化

一、網絡

數據庫邏輯設計的規範化 數據庫邏輯設計的規範化就是咱們通常所說的範式,咱們能夠這樣來簡單理解範式:併發

第1規範:沒有重複的組或多值的列,這是數據庫設計的最低要求數據庫設計

第2規範: 每一個非關鍵字段必須依賴於主關鍵字,不能依賴於一個組合式主關鍵字的某些組成部分。消除部分依賴,大部分狀況下,數據庫設計都應該達到第二範式。函數

第3規範: 一個非關鍵字段不能依賴於另外一個非關鍵字段。消除傳遞依賴,達到第三範式應該是系統中大部分表的要求,除非一些特殊做用的表。更高的範式要求這裏就再也不做介紹了,我的認爲,若是所有達到第二範式,大部分達到第三範式,系統會產生較少的列和較多的表,於是減小了數據冗餘,也利於性能的提升。

二、

合理的冗餘

徹底按照規範化設計的系統幾乎是不可能的,除非系統特別的小,在規範化設計後,有計劃地加入冗餘是必要的。 冗餘能夠是冗餘數據庫、冗餘表或者冗餘字段,不一樣粒度的冗餘能夠起到不一樣的做用。 冗餘能夠是爲了編程方便而增長,也能夠是爲了性能的提升而增長。從性能角度來講,冗餘數據庫能夠分散數據庫壓力,冗餘表能夠分散數據量大的表的併發壓力,也能夠加快特殊查詢的速度,冗餘字段能夠有效減小數據庫表的鏈接,提升效率。

3 、

主鍵的設計

主鍵是必要的,SQL SERVER的主鍵同時是一個惟一索引,並且在實際應用中,咱們每每選擇最小的鍵組合做爲主鍵,因此主鍵每每適合做爲表的彙集索引。彙集索引對查詢的影響是比較大的,這個在下面索引的敘述。 在有多個鍵的表,主鍵的選擇也比較重要,通常選擇總的長度小的鍵,小的鍵的比較速度快,同時小的鍵可使主鍵的B樹結構的層次更少。

主鍵的選擇還要注意組合主鍵的字段次序,對於組合主鍵來講,不一樣的字段次序的主鍵的性能差異可能會很大,通常應該選擇重複率低、單獨或者組合查詢可能性大的字段放在前面。

四、

外鍵的設計

外鍵做爲數據庫對象,不少人認爲麻煩而不用,實際上,外鍵在大部分狀況下是頗有用的,理由是: 外鍵是最高效的一致性維護方法,數據庫的一致性要求,依次能夠用外鍵、CHECK約束、規則約束、觸發器、客戶端程序,通常認爲,離數據越近的方法效率越高。

謹慎使用級聯刪除和級聯更新,級聯刪除和級聯更新做爲SQL SERVER 2000當年的新功能,在2005做了保留,應該有其可用之處。我這裏說的謹慎,是由於級聯刪除和級聯更新有些突破了傳統的關於外鍵的定義,功能有點太過強大,使用前必須肯定本身已經把握好其功能範圍,不然,級聯刪除和級聯更新可能讓你的數據莫名其妙的被修改或者丟失。從性能看級聯刪除和級聯更新是比其餘方法更高效的方法。

五、

字段的設計

字段是數據庫最基本的單位,其設計對性能的影響是很大的。須要注意以下:

A、數據類型儘可能用數字型,數字型的比較比字符型的快不少。

B、 數據類型儘可能小,這裏的儘可能小是指在知足能夠預見的將來需求的前提下的。

C、 儘可能不要容許NULL,除非必要,能夠用NOT NULL+DEFAULT代替。

D、少用TEXT和IMAGE,二進制字段的讀寫是比較慢的,並且,讀取的方法也很少,大部分狀況下最好不用。

E、 自增字段要慎用,不利於數據遷移。

六、

數據庫物理存儲和環境的設計 在設計階段,能夠對數據庫的物理存儲、操做系統環境、網絡環境進行必要的設計,使得咱們的系統在未來能適應比較多的用戶併發和比較大的數據量。 這裏須要注意文件組的做用,適用文件組能夠有效把I/O操做分散到不一樣的物理硬盤,提升併發能力。

七、

系統設計

整個系統的設計特別是系統結構設計對性能是有很大影響的,對於通常的OLTP系統,能夠選擇C/S結構、三層的C/S結構等,不一樣的系統結構其性能的關鍵也有所不一樣。 系統設計階段應該概括一些業務邏輯放在數據庫編程實現,數據庫編程包括數據庫存儲過程、觸發器和函數。用數據庫編程實現業務邏輯的好處是減小網絡流量並可更充分利用數據庫的預編譯和緩存功能。

八、

索引的設計

在設計階段,能夠根據功能和性能的需求進行初步的索引設計,這裏須要根據預計的數據量和查詢來設計索引,可能與未來實際使用的時候會有所區別。

關於索引的選擇,應改主意:

A、 根據數據量決定哪些表須要增長索引,數據量小的能夠只有主鍵。

B、 根據使用頻率決定哪些字段須要創建索引,選擇常常做爲鏈接條件、篩選條件、聚合查詢、排序的字段做爲索引的候選字段。

C、 把常常一塊兒出現的字段組合在一塊兒,組成組合索引,組合索引的字段順序與主鍵同樣,也須要把最經常使用的字段放在前面,把重複率低的字段放在前面。

D、 一個表不要加太多索引,由於索引影響插入和更新的速度。

相關文章
相關標籤/搜索