程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server數據庫性能優化技巧

SQL Server數據庫性能優化技巧

編輯:關於SqlServer

設計1個應用系統似乎並不難,但是要想使系統達到最優化的性能並不是一件容易的事。在開發工具、數據庫設計、應用程序的結構、查詢設計、接口選擇等方面有多種選擇,這取決於特定的應用需求以及開發隊伍的技能。本文以SQL Server為例,從後台數據庫的角度討論應用程序性能優化技巧,並且給出了一些有益的建議。

1 數據庫設計

要在良好的SQL Server方案中實現最優的性能,最關鍵的是要有1個很好的數據庫設計方案。在實際工作中,許多SQL Server方案往往是由於數據庫設計得不好導致性能很差。所以,要實現良好的數據庫設計就必須考慮這些問題。

1.1 邏輯庫規范化問題

一般來說,邏輯數據庫設計會滿足規范化的前3級標准:

1.第1規范:沒有重復的組或多值的列。

2.第2規范:每個非關鍵字段必須依賴於主關鍵字,不能依賴於1個組合式主關鍵字的某些組成部分。

3.第3規范:1個非關鍵字段不能依賴於另1個非關鍵字段。

遵守這些規則的設計會產生較少的列和更多的表,因而也就減少了數據冗余,也減少了用於存儲數據的頁。但表關系也許需要通過復雜的合並來處理,這樣會降低系統的性能。某種程度上的非規范化可以改善系統的性能,非規范化過程可以根據性能方面不同的考慮用多種不同的方法進行,但以下方法經實踐驗證往往能提高性能。

1.如果規范化設計產生了許多4路或更多路合並關系,就可以考慮在數據庫實體(表)中加入重復屬性(列)。

2.常用的計算字段(如總計、最大值等)可以考慮存儲到數據庫實體中。

比如某一個項目的計劃管理系統中有計劃表,其字段為:項目編號、年初計劃、二次計劃、調整計劃、補列計劃…,而計劃總數(年初計劃+二次計劃+調整計劃+補列計劃)是用戶經常需要在查詢和報表中用到的,在表的記錄量很大時,有必要把計劃總數作為1個獨立的字段加入到表中。這裡可以采用觸發器以在客戶端保持數據的一致性。

3.重新定義實體以減少外部屬性數據或行數據的開支。相應的非規范化類型是:

(1)把1個實體(表)分割成2個表(把所有的屬性分成2組)。這樣就把頻繁被訪問的數據同較少被訪問的數據分開了。這種方法要求在每個表中復制首要關鍵字。這樣產生的設計有利於並行處理,並將產生列數較少的表。

(2)把1個實體(表)分割成2個表(把所有的行分成2組)。這種方法適用於那些將包含大量數據的實體(表)。在應用中常要保留歷史記錄,但是歷史記錄很少用到。因此可以把頻繁被訪問的數據同較少被訪問的歷史數據分開。而且如果數據行是作為子集被邏輯工作組(部門、銷售分區、地理區域等)訪問的,那麼這種方法也是很有好處的。

1.2 生成物理數據庫

要想正確選擇基本物理實現策略,必須懂得數據庫訪問格式和硬件資源的操作特點,主要是內存和磁盤子系統I/O。這是一個范圍廣泛的話題,但以下的准則可能會有所幫助。

1.與每個表列相關的數據類型應該反映數據所需的最小存儲空間,特別是對於被索引的列更是如此。比如能使用smallint類型就不要用integer類型,這樣索引字段可以被更快地讀取,而且可以在1個數據頁上放置更多的數據行,因而也就減少了I/O操作。

2.把1個表放在某個物理設備上,再通過SQL Server段把它的不分簇索引放在1個不同的物理設備上,這樣能提高性能。尤其是系統采用了多個智能型磁盤控制器和數據分離技術的情況下,這樣做的好處更加明顯。

3.用SQL Server段把一個頻繁使用的大表分割開,並放在2個單獨的智能型磁盤控制器的數據庫設備上,這樣也可以提高性能。因為有多個磁頭在查找,所以數據分離也能提高性能。

4.用SQL Server段把文本或圖像列的數據存放在1個單獨的物理設備上可以提高性能。1個專用的智能型的控制器能進一步提高性能。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved