摘要:應用SQL不僅要確保它的正確性,同時也要保證SQL有良好的執行性能。該文分析介紹了幾種常用的SQL優化方法。論述了SQL Server數據庫優化機制。
關鍵詞:SQL Server;數據庫;優化
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)35-2536-02
SQL Optimization Based on SQL Database
YANG Ya-ping
(Chien-shiung Institute of Technology, Taicang 215411, China)
Abstract: Not only Correctness but also efficiency one writes SQL statements. This article introduces and analyses of SQL, which include proper indexes design .This paper research,some questions of SQL performance optimization with SQ L SERVER such as operator operation. some suggestion of optimization bate on pure theory would misadvise user of SQL.
Key words: SQL Server; database; optimization
1 前言
微軟公司的SQL Server數據庫因為其價格便宜、功能強大、容易操作等特點已經被中國中小企業廣泛應用,但是SQL Server數據庫優化是一個常常被人們忽視的問題。甚至有人認SQL Server數據庫優化并不重要,但事實是SQL Server數據庫是一種高性能的數據庫管理系統,在客戶/服務器體系結構中得到了廣泛的應用。基于SQL Server的數據庫應用系統的性能包括系統的響應時間、吞吐量、系統的并行處理能力等。從數據庫設計、查詢結構、并行處理、客戶/服務器模式、應用編程等方面進行優化調整,可以有效地提高系統的性能。SQL Server數據庫的優化方法還有很多,比如優化內存、優化數據庫磁盤等等。下面就SQL Server環境下的SQL優化方法探討做些簡單的探討。
2 與SQL Server數據庫有關的硬件設計性能的優化
與SQL Server有關的硬件設計包括CPU、內存、磁盤子系統和網絡。
2.1 系統處理器(CPU)
根據自己的具體需要確定CPU結構的過程就是估計在硬件平臺上占用CPU的工作量的過程。我們可以使用 System Monitor確定CPU的使用率,如果以75%或更高的速率長時間運行,就可能碰到了CPU瓶頸問題,這時應該升級CPU。
2.2 內存(RAM)
為SQL Server方案確定合適的內存設置對實現良好的性能是至關重要的。SQL Server用內存做過程緩存、數據和索引項緩存、靜態服務器開支和設置開支。SQL Server最多能利用 2GB虛擬內存,這也是最大的設置值。還有點必須考慮的是Windows2003 Server和它的所有和關服務也要占用內存。
2.3 磁盤I/O系統
設計1個好的磁盤I/O系統是實現良好的SQL Server方案的一個很重要的方面。這里討論的磁盤I/O系統至少有1個磁盤控制設備和1個或多個硬盤單元,考慮到磁盤設置和文件系統,有如下特點:控制器有高速緩存;總線主板上有處理器,可以減少對系統CPU的中斷;異步讀寫支持;32位RAID支持;高速SCSTU 320控制器,讀寫速度320M B/S。
由I/O系統發生的瓶頸問題是數據庫系統可能遇到的最常見的同硬件有關的問題。配置很差的I/O系統引起性能問題的嚴重程度僅次于編寫很差的SQL語句。解決I/O系統有關的問題最簡單的辦法就是增加磁盤驅動器。
3 SQL Server數據庫的查詢優化
查詢優化首先要注意的一個問題是存儲過程,設計優良的應用程序都應當使用存儲過程,不論是否將應用程序的業務邏輯寫入存儲過程都應如此,甚至連沒有業務邏輯組件的標準SQL語句,在用參數打包成存儲過程后也能獲得性能收益,編譯進存儲過程的SQL語句在執行時可省去大量的處理。
存儲過程的另一個優點是客戶端執行請求使用網絡的效率往往比將等效的SQL語句發送到服務器高。例如。在SQL Server中假設應用程序需要將一個人的二進制值插入image數據列,為使用INSERT語句發送數據,該應用程序必須將該二進制值換為字符串(其大小翻兩倍),然后發送到服務器,服務器再將該值轉換回二進制格式以存儲在image列中。相反,應用程序可以創建下列格式的存儲過程:CREATE PROCEDURE Procedurel (l pl image)ASINSERT Tablel VALUES (a pl)。當客戶端應用程序請求執行過程P時,image參數值將一直以二進制格式發送到服務器,從而節省處理時間并減少網絡流量。數據庫系統的并發控制也是影響性能的一個重要方面。為了避免多個用戶同時操作可能導致的數據不一致,SQL Server采用了封鎖機制。SQL Server中的鎖可分為共享鎖(shared lock):由讀取頁的進程所使用。共享鎖只在特定頁的讀取過程中有效。修改鎖(update lock),用于將要修改數據的進程,當數據發生變化時,修改鎖自動改為獨占鎖。獨占鎖(exclusive lock),用于當前正在修改數據的進程。獨占鎖作用于所有影響到的頁上直至事務結束。
4 SQL Server數據庫設計的優化
4.1 SQL Server數據庫的規范化
數據庫設計方面包括表的設計、表的數量和大小、表的設計規范程序、游標的使用等等都會對運行效率有重要影響。其中涉及到數據庫規范化問題時,數據庫被規范化后,減少了數據的冗余,數據行趨向變窄這樣SQL SERVER數據庫的每頁可以包含更多的行,從而加速表的掃描和返回多行的查詢,改進了單個表的查詢性能。但是,另一方面,當查詢涉及多個表時,則需要更多的連接把信息從多個表中組合到一起,這會引起大量的CPU和I/O處理。所以有時有意違反規范化設計的規則,這是數據庫的非規范化。就像剛才說的數據庫的規范化原則會產生較少的列和更多的表,但表關系也許需要通過復雜的合并來處理, 這樣會降低系統的性能。在某些情況下,非規范化可以改善系統的性能,通過重新定義實體以減少外部屬性數據或行數據的開支。
4.2 SQL Server數據庫索引的選擇
索引是常見的數據庫對象,它的設置好壞、使用是否得當,極大地影響數據庫應用程序和數據庫的性能。在良好的數據庫設計基礎上,能有效地使用索引是 SQL SERVER取得高性能的基礎。如果對于一個未建立索引的表執行查詢操作, SQL SERVER必須進行表掃描,從磁盤上讀表的每一個數據頁,從而挑選出所有符合條件的數據行。特別是當一個表有很多行時,就會浪費大量時間,效率太低。然而在建立索引之后,SQL SERVER將根據索引的指示,直接定位到需要查詢的數據行,從而加快 SQL SERVER 的數據檢索操作。這樣利用索引可以避免表掃描,并減少因查詢而造成的 I/O 開銷。
建立索引是以最小的方法得到所需數據的有效方法。對于每一個查詢SQL Server優化器將確定是否有相關的索引可以用于訪問數據。一個利用索引的訪問與全表掃描相比,可以大大減少查詢時間。索引可分為聚集索引與非聚集索引兩種,前者對數據進行物理排序,速度快,但一個表只能建立一個;后者僅對數據進行邏輯排序,速度相對聚集索引慢,但一個表可以建立多個。索引的建立雖然加快了查詢,另一方面卻降低了數據更新的速度,這是因為新數據不僅要增加到表中,也要增加到索引中。另外,索引還需要額外的磁盤空間和維護開銷。因此設計時應選擇有效的索引,避免過多引用索引。通常只為對應用程序起關鍵作用的查詢,或者被很多用戶頻繁使用的查詢創建索引。所以也要注意在使用索引的時候一定要謹慎,要選擇恰當的索引,盡量減少磁盤訪問的次數,提高整個系統的性能。
5 結束語
隨著 SQL 數據庫中數據量的增加,運行效率將是數據庫應用與管理中的關鍵問題。而影響其效率的因素是多方面的,本文首先介紹了SQL Server環境下的SQL優化的情況,然后本文對SQL Server數據庫有關的硬件設計性能的優化、SQL Server數據庫查詢符號的優化、數據庫的設計等方面提出了一些對數據庫的優化技術,當然實現優化的方法還有很多,要根據具體情況而定。對于不同的應用情況,我們應該具體情況具體分析,各方面優化措施綜合運用,本文對從優化方法的探討對有效提高整個數據庫的運行效率有一定的幫助。
參考文獻:
[1] 劉波,李陶深,楊柳,嚴毅.MIS中數據庫性能優化的研究[J].計算機工程.2002,27(7):98-100.
[2] 谷震離.查詢語句對SQL Server數據庫查詢性能優化分析[J].福建電腦,2007(3):21-22.
[3] 王振輝,吳廣茂.SQL查詢語句優化研究[J].計算機應用,2005,25(12):207-208.
[4] 楊庚.關系數據庫SQL語言查詢過程的分析和優化設計[J].計算機工程與應用,1999(11):87-88.