SQL SERVER數(shù)據(jù)庫性能優(yōu)化研究(論文)_第1頁
SQL SERVER數(shù)據(jù)庫性能優(yōu)化研究(論文)_第2頁
SQL SERVER數(shù)據(jù)庫性能優(yōu)化研究(論文)_第3頁
SQL SERVER數(shù)據(jù)庫性能優(yōu)化研究(論文)_第4頁
SQL SERVER數(shù)據(jù)庫性能優(yōu)化研究(論文)_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、吉林大學(xué)珠海學(xué)院畢 業(yè) 論 文sql server數(shù)據(jù)庫性能優(yōu)化研究researching of the sql server database performance optimization系別:計算機科學(xué)與技術(shù)專業(yè)名稱:計算機科學(xué)與技術(shù)學(xué)生姓名:李信龍學(xué)號:04050722指導(dǎo)教師姓名、職稱:崔樹林、講師完成日期 2009年 5月 13 日iii吉林大學(xué)珠海學(xué)院本科畢業(yè)論文開題報告選 題sql server數(shù)據(jù)庫性能優(yōu)化研究院 系計算機系專 業(yè)計算機科學(xué)與技術(shù)學(xué)生姓名李信龍指導(dǎo)教師崔樹林本選題的背景、意義及國內(nèi)外發(fā)展?fàn)顩r: 數(shù)據(jù)庫技術(shù)是計算機科學(xué)技術(shù)發(fā)展最快、應(yīng)用最廣泛的領(lǐng)域之一,在信息

2、管理自動化程度日益提高的今天,數(shù)據(jù)庫技術(shù)已經(jīng)成為現(xiàn)代計算機信息系統(tǒng)和應(yīng)用系統(tǒng)的基礎(chǔ)和核心。數(shù)據(jù)庫技術(shù)最初產(chǎn)生于20世紀(jì)60年代中期,從最初的層次模型、網(wǎng)狀模型,到目前的關(guān)系模型、面向?qū)ο竽P?,己?jīng)過40年左右的發(fā)展。數(shù)據(jù)庫建設(shè)是現(xiàn)代信息產(chǎn)業(yè)的基本建設(shè)工程,一個國家擁有多少自己的數(shù)據(jù)庫,能用數(shù)據(jù)庫提供多少服務(wù),是各國經(jīng)濟實力、文明程度和科技水平的重要標(biāo)志。我國引進(jìn)數(shù)據(jù)庫技術(shù)始于20世紀(jì)70年代末,自進(jìn)入20世紀(jì)80年代以來,我國數(shù)據(jù)庫建設(shè)有了較大發(fā)展,從微型計算機上運行的數(shù)據(jù)庫到當(dāng)前大型數(shù)據(jù)庫系統(tǒng)的引入和應(yīng)用。但從對數(shù)據(jù)庫系統(tǒng)的應(yīng)用效果和對數(shù)據(jù)庫技術(shù)指標(biāo)掌握上來比較,與發(fā)達(dá)國家之間仍然存在較大的

3、差距。數(shù)據(jù)庫技術(shù)應(yīng)用從傳統(tǒng)的商務(wù)數(shù)據(jù)處理不斷擴大到許多新的領(lǐng)域,如計算機圖像處理、多媒體應(yīng)用、商業(yè)管理、gis等,要使這些領(lǐng)域中應(yīng)用的信息系統(tǒng)高效、正常、安全地運行,其中最為顯著的就是數(shù)據(jù)庫的性能問題。在網(wǎng)絡(luò)應(yīng)用和電子商務(wù)高速發(fā)展的時代,信息系統(tǒng)在國民經(jīng)濟建設(shè)中擔(dān)負(fù)著越來越重要的任務(wù),如何使有限的計算機系統(tǒng)資源充分發(fā)揮應(yīng)有的作用?如何保證用戶的響應(yīng)速度和服務(wù)質(zhì)量?如何保證未來的某個時間保持現(xiàn)有的運行性能?這些問題都屬于數(shù)據(jù)庫性能優(yōu)化的范疇。隨著數(shù)據(jù)庫規(guī)模的不斷擴大,數(shù)據(jù)庫系統(tǒng)的性能問題也越來越突出,數(shù)據(jù)庫應(yīng)用系統(tǒng)能否正常、高效地運行倍受關(guān)注,數(shù)據(jù)庫優(yōu)化技術(shù)方法的探索具有非常重要的意義。研究內(nèi)容

4、: 由于數(shù)據(jù)庫調(diào)優(yōu)涉及很多方面的知識,本論文將從幾個方面研究:數(shù)據(jù)庫邏輯結(jié)構(gòu)和物理結(jié)構(gòu)的優(yōu)化、sql語句優(yōu)化、合適索引的創(chuàng)建、sql server分區(qū)技術(shù)等等。 1、數(shù)據(jù)庫邏輯結(jié)構(gòu)和物理結(jié)構(gòu)的優(yōu)化 設(shè)計應(yīng)用的開始步驟之一就是表(或關(guān)系)的設(shè)計,數(shù)據(jù)將要存儲在表中。一旦應(yīng)用系統(tǒng)運行起來,修改表的設(shè)計有可能需要修改許多運用程序,這是我們不愿意看到的,而且修改后還要進(jìn)行測試。因此,在最初就設(shè)計好數(shù)據(jù)庫的表是很重要的。規(guī)范化是設(shè)計數(shù)據(jù)庫表的理論指導(dǎo)。 2、索引調(diào)優(yōu) 在良好的數(shù)據(jù)庫設(shè)計基礎(chǔ)上,能有效地使用索引是數(shù)據(jù)庫取得高性能的基礎(chǔ),數(shù)據(jù)庫采用基于代價的優(yōu)化模型,它對每一個提交的有關(guān)表的查詢,決定是否使

5、用索引或用哪一個索引。因為查詢執(zhí)行的大部分開銷是磁盤i/o,使用索引提高性能的一個主要目標(biāo)是避免全表掃描,因為全表掃描需要從磁盤上讀表的每一個數(shù)據(jù)頁,如果有索引指向數(shù)據(jù)值,則查詢只需讀幾次磁盤就可以了。所以如果建立了合理的索引,優(yōu)化器就能利用索引加速數(shù)據(jù)的查詢過程。但是,索引并不總是提高系統(tǒng)的性能,在增、刪、改操作中索引的存在會增加一定的工作量,因此,在適當(dāng)?shù)牡胤皆黾舆m當(dāng)?shù)乃饕牟缓侠淼牡胤絼h除次優(yōu)的索引,將有助于優(yōu)化那些性能較差的數(shù)據(jù)庫應(yīng)用。實踐表明,合理的索引設(shè)計是建立在對各種查詢的分析和預(yù)測上的,只有正確地使索引與程序結(jié)合起來,才能產(chǎn)生最佳的優(yōu)化方案。3、sql優(yōu)化在使用sql時往往會

6、陷入一個誤區(qū),即太關(guān)注于所得的結(jié)果是否正確,而忽略了不同的實現(xiàn)方法之間可能存在的性能差異,這種性能差異在大型的或是復(fù)雜的數(shù)據(jù)庫環(huán)境中(如聯(lián)機事務(wù)處理oltp或決策支持系統(tǒng)dss)中表現(xiàn)得尤為明顯。本人在工作實踐中發(fā)現(xiàn),不良的sql往往來自于不恰當(dāng)?shù)乃饕O(shè)計、不充份的連接條件和不可優(yōu)化的where子句。在對它們進(jìn)行適當(dāng)?shù)膬?yōu)化后,其運行速度有了明顯地提高研究方法、手段及步驟:一、閱讀相關(guān)數(shù)據(jù)庫理論書籍,用這些理論來證明調(diào)優(yōu)方法的合理性二、上網(wǎng)查找具體數(shù)據(jù)庫性能調(diào)優(yōu)的技術(shù)實現(xiàn)。 三、設(shè)計一個具體實例進(jìn)行比較調(diào)優(yōu)前和調(diào)優(yōu)后的差別 四、與有這方面實踐經(jīng)驗的同事交流和討論參考文獻(xiàn):1 dennis sha

7、sha 著 孟小峰 譯數(shù)據(jù)庫性能調(diào)優(yōu):原理與技術(shù)m機械工業(yè)出版社, 2004-05-012 itzik ben-gan, dejan sarka, roger wolter著 趙立東 譯 microsoft sql server 2005 技術(shù)內(nèi)幕:t-sql程序設(shè)計m 電子工業(yè)出版社, 2007-08-013 kalen delaney 著 聶偉, 方磊, 揭磊駿譯 microsoft sql server 2005技術(shù)內(nèi)幕:存儲引擎m 電子工業(yè)出版社, 2007-09-014 jim gray andreas reuter 著 孟小峰 譯事務(wù)處理(概念與技術(shù))m 機械工

8、業(yè)出版社 2004-1-15 王珊, 薩師煊  著數(shù)據(jù)庫系統(tǒng)概論第四版m 高等教育出版社2006-5-16 silberchatz ,abraham著 楊冬青, 唐世渭 譯數(shù)據(jù)庫系統(tǒng)概念(原書第4版)m 機械工業(yè)出版社 2003-3-17 嚴(yán)蔚敏, 吳偉民著數(shù)據(jù)結(jié)構(gòu)(c語言版)m 清華大學(xué)出版社 2007-03-01摘 要數(shù)據(jù)庫系統(tǒng)的性能最終決定數(shù)據(jù)庫的可用性和生命力。大多數(shù)數(shù)據(jù)庫系統(tǒng)在運行一段時間后都會存在一定的性能問題,主要涉及數(shù)據(jù)庫硬件、數(shù)據(jù)庫服務(wù)器、數(shù)據(jù)庫內(nèi)存、應(yīng)用程序、操作系統(tǒng)、數(shù)據(jù)庫參數(shù)等方面。因此,基于數(shù)據(jù)庫系統(tǒng)的性能調(diào)整與優(yōu)化對于整個系統(tǒng)的正常運行起著至關(guān)重要的作用。

9、數(shù)據(jù)庫性能調(diào)整與優(yōu)化涉及到多個層面,通過統(tǒng)一規(guī)劃、系統(tǒng)分析做出相應(yīng)的調(diào)整,可以提高數(shù)據(jù)庫的穩(wěn)定性和可用性,保障系統(tǒng)高效地運行,解決系統(tǒng)瓶頸,節(jié)約系統(tǒng)開銷,具有良好的應(yīng)用價值。同時也對理論研究提供了一定的方法指導(dǎo)?;诖?,論文根據(jù)本人在實際工作中遇到的問題和平時對數(shù)據(jù)庫的使用經(jīng)驗,將數(shù)據(jù)庫設(shè)計、合理的索引添加以及sql語句優(yōu)化等方面的性能調(diào)整與優(yōu)化問題作為主要研究內(nèi)容,對其進(jìn)行了深入地分析和討論,給出了一般情況下sql server數(shù)據(jù)庫應(yīng)用系統(tǒng)的性能調(diào)整策略及優(yōu)化方法。首先,介紹了數(shù)據(jù)庫性能調(diào)整的相關(guān)研究背景、論文選題意義以及數(shù)據(jù)庫性能調(diào)整與優(yōu)化架構(gòu),涉及性能調(diào)整與優(yōu)化的概念、性能評價指標(biāo)以及

10、數(shù)據(jù)庫優(yōu)化的主要方面。其次,對常用的幾種優(yōu)化技術(shù)進(jìn)行了詳細(xì)地介紹與說明??偨Y(jié)歸納了數(shù)據(jù)庫邏輯結(jié)構(gòu)和物理結(jié)構(gòu)的優(yōu)化、sql語句優(yōu)化的實質(zhì)與目的、方法與技巧,索引創(chuàng)建的相關(guān)規(guī)則,sql server分區(qū)技術(shù)等。最后提出一個針對sql server數(shù)據(jù)庫的系統(tǒng)性能總體調(diào)整策略。最后,對sql server數(shù)據(jù)庫性能調(diào)整與優(yōu)化問題進(jìn)行了總結(jié)。關(guān)鍵詞:數(shù)據(jù)庫;sql server;性能優(yōu)化abstractthe performance of database systems eventually determines their availability and survivability. most

11、of them will bring about some performance problems more or less after running for a period of time, which mainly involve database hardware, database server, database memory, applications, operating systems and database parameters, etc. therefore, performance tuning and optimization of database syste

12、ms, which concern multiple aspects, are very vital to the normal running of the whole system. through a unified plan and systematical analysis to make appropriate adjustment, the stability and availability of database will be improved, high running efficiency will be guaranteed, system bottleneck wi

13、ll be solved, system overhead will be reduced, considerable applicability and in the meanwhile will be obtained, and some guidelines for theoretical research will be provided. based on the above-mentioned idea, by problems meeting in working experience of using sql database, the paper principally pa

14、ys attention to the research on the performance tuning and optimization of sql statements, and makes a deep analysis and discussion. it suggests in general some performance tuning strategies and optimization approaches of sql server application systems to drive the development of sql server performa

15、nce management and optimization technology.firstly, the paper introduces the corresponding research background of performance tuning of database, significance of selected topic and framework of performance tuning and optimization of database including their concepts, performance evaluation index and

16、 primary aspects of optimization.secondly, several common optimization techniques are introduced and explained in detail. this paper summarizes optimization of database logical structure and physical structures, methods and techniques of sql optimization, relevant rules of index creation, and intell

17、igent use of sql server partitioning techniques. the fore-and-aft performance indexes of various optimization techniques are analyzed and compared. an overall tuning strategy of system performance for sql server databases is put forward in the end.finally, this paper summarizes and prospects the pro

18、blems of performance tuningand optimization of sql server databases.keywords:database;sql server;performance;optimization目錄1 緒 論11.1課題研究背景11.2研究意義與目的11.3研究的內(nèi)容與組織結(jié)構(gòu)22 數(shù)據(jù)庫性能優(yōu)化架構(gòu)32.1性能調(diào)整與優(yōu)化概述32.2數(shù)據(jù)庫優(yōu)化的目標(biāo)32.2.1提高系統(tǒng)的吞吐量32.2.2縮短系統(tǒng)的響應(yīng)時間42.3性能調(diào)整的步驟42.3.1優(yōu)化業(yè)務(wù)邏輯52.3.2調(diào)整數(shù)據(jù)結(jié)構(gòu)設(shè)計52.3.3優(yōu)化數(shù)據(jù)庫的邏輯結(jié)構(gòu)52.3.4優(yōu)化數(shù)據(jù)庫的操作53 性

19、能優(yōu)化技術(shù)介紹63.1數(shù)據(jù)庫結(jié)構(gòu)優(yōu)化63.1.1數(shù)據(jù)庫邏輯結(jié)構(gòu)的優(yōu)化63.1.2數(shù)據(jù)庫物理存儲結(jié)構(gòu)的優(yōu)化63.1.3使用分區(qū)73.2 sql查詢語句的優(yōu)化93.2.1合理使用索引93.2.2優(yōu)化sql語句的一些具體策略114 商品訂單管理系統(tǒng)數(shù)據(jù)庫設(shè)計165 優(yōu)化實例185.1數(shù)據(jù)庫物理結(jié)構(gòu)的優(yōu)化185.2添加必要的索引185.2.1確定預(yù)索引字段205.2.2創(chuàng)建適當(dāng)?shù)乃饕?05.2.3實驗結(jié)果分析205.3 sql語句的優(yōu)化216 總 結(jié)24參考文獻(xiàn)25致 謝26301 緒 論1.1課題研究背景數(shù)據(jù)庫技術(shù)是計算機科學(xué)技術(shù)發(fā)展最快、應(yīng)用最廣泛的領(lǐng)域之一,在信息管理自動化程度日益提高的今天,數(shù)

20、據(jù)庫技術(shù)已經(jīng)成為現(xiàn)代計算機信息系統(tǒng)和應(yīng)用系統(tǒng)的基礎(chǔ)和核心。數(shù)據(jù)庫技術(shù)最初產(chǎn)生于20世紀(jì)60年代中期,從最初的層次模型、網(wǎng)狀模型,到目前的關(guān)系模型、面向?qū)ο竽P停航?jīng)過40年左右的發(fā)展。數(shù)據(jù)庫建設(shè)是現(xiàn)代信息產(chǎn)業(yè)的基本建設(shè)工程,一個國家擁有多少自己的數(shù)據(jù)庫,能用數(shù)據(jù)庫提供多少服務(wù),是各國經(jīng)濟實力、文明程度和科技水平的重要標(biāo)志。我國引進(jìn)數(shù)據(jù)庫技術(shù)始于20世紀(jì)70年代末,自進(jìn)入20世紀(jì)80年代以來,我國數(shù)據(jù)庫建設(shè)有了較大發(fā)展,從微型計算機上運行的數(shù)據(jù)庫到當(dāng)前大型數(shù)據(jù)庫系統(tǒng)的引入和應(yīng)用。但從對數(shù)據(jù)庫系統(tǒng)的應(yīng)用效果和對數(shù)據(jù)庫技術(shù)指標(biāo)掌握上來比較,與發(fā)達(dá)國家之間仍然存在較大的差距。數(shù)據(jù)庫技術(shù)應(yīng)用從傳統(tǒng)的商務(wù)

21、數(shù)據(jù)處理不斷擴大到許多新的領(lǐng)域,如計算機圖像處理、多媒體應(yīng)用、商業(yè)管理、gis等,要使這些領(lǐng)域中應(yīng)用的信息系統(tǒng)高效、正常、安全地運行,其中最為顯著的就是數(shù)據(jù)庫的性能問題。在網(wǎng)絡(luò)應(yīng)用和電子商務(wù)高速發(fā)展的時代,信息系統(tǒng)在國民經(jīng)濟建設(shè)中擔(dān)負(fù)著越來越重要的任務(wù),如何使有限的計算機系統(tǒng)資源充分發(fā)揮應(yīng)有的作用?如何保證用戶的響應(yīng)速度和服務(wù)質(zhì)量?如何保證未來的某個時間保持現(xiàn)有的運行性能?這些問題都屬于數(shù)據(jù)庫性能優(yōu)化的范疇。隨著數(shù)據(jù)庫規(guī)模的不斷擴大,數(shù)據(jù)庫系統(tǒng)的性能問題也越來越突出,數(shù)據(jù)庫應(yīng)用系統(tǒng)能否正常、高效地運行倍受關(guān)注,數(shù)據(jù)庫優(yōu)化技術(shù)方法的探索具有非常重要的意義。1.2研究意義與目的sql server

22、在數(shù)據(jù)庫領(lǐng)域一直占據(jù)著不小的份額。sql server現(xiàn)在可用于大型機、客戶/服務(wù)器以及pc平臺,適合于各種操作系統(tǒng),包括microsotf windows和windows nt、0s/390(mvs)、各種unix操作系統(tǒng)、linux等。同時,sql server數(shù)據(jù)庫在國內(nèi)外也獲得了諸多成功應(yīng)用。企業(yè)資源規(guī)劃應(yīng)用程序包、數(shù)據(jù)倉庫以及許多公司的客戶應(yīng)用系統(tǒng)都要依賴sql server。sql server數(shù)據(jù)庫產(chǎn)品在整個數(shù)據(jù)庫產(chǎn)品的應(yīng)用中占據(jù)了不小的比例,并且有不斷上升的趨勢。sql server數(shù)據(jù)庫系統(tǒng)博大精深,其系統(tǒng)管理工作非常復(fù)雜。對于sql server數(shù)據(jù)庫來說,操作系統(tǒng)的性能、

23、服務(wù)器硬件的性能、數(shù)據(jù)庫的設(shè)計、表空間的規(guī)劃、聚簇的使用、并行控制等無一不影響其運行的整體性能。sql server數(shù)據(jù)庫服務(wù)器是高度可優(yōu)化的軟件產(chǎn)品,對sql server數(shù)據(jù)庫進(jìn)行性能調(diào)整與優(yōu)化具有非常重要的意義。目前國內(nèi)外關(guān)于sql server數(shù)據(jù)庫系統(tǒng)的應(yīng)用實例優(yōu)化并不多,而且講解比較理論化。因此,本文根據(jù)自己平時的實際工作所遇到的一些問題和自己對sql server數(shù)據(jù)庫的使用經(jīng)驗,主要從數(shù)據(jù)庫設(shè)計優(yōu)化、索引添加、查詢優(yōu)化這三個方面進(jìn)行實驗測試,通過對各種優(yōu)化技術(shù)的介紹、分析和研究,對使用不同優(yōu)化技術(shù)前后的性能評價指標(biāo)進(jìn)行比較,體現(xiàn)各種優(yōu)化技術(shù)對數(shù)據(jù)庫運行效率的影響程度,提出sql

24、 server數(shù)據(jù)庫應(yīng)用系統(tǒng)性能優(yōu)化的合理方法。使得能有效的使用sql server數(shù)據(jù)庫產(chǎn)品,將它的性能調(diào)整到更適合自己的需要。1.3研究的內(nèi)容與組織結(jié)構(gòu)數(shù)據(jù)庫性能問題是當(dāng)今諸如管理信息系統(tǒng)等眾多數(shù)據(jù)庫應(yīng)用系統(tǒng)所面臨的共同問題,為了解決系統(tǒng)運行過程中遇到的種種瓶頸,對數(shù)據(jù)庫性能調(diào)整理論和應(yīng)用的研究是迫切需要的。本文對目前sql server數(shù)據(jù)庫性能調(diào)整的一些優(yōu)化技術(shù)的應(yīng)用實踐進(jìn)行了討論,具有一定的理論研究價值和現(xiàn)實意義。各章節(jié)安排如下:第一章綜述了數(shù)據(jù)庫性能調(diào)整的研究現(xiàn)狀和發(fā)展概況,闡述了論文研究的意義與目的。第二章介紹了數(shù)據(jù)庫性能調(diào)整與優(yōu)化的主要目標(biāo),分析了系統(tǒng)性能評價指標(biāo)和數(shù)據(jù)庫性能優(yōu)

25、化的主要方面。第三章對性能優(yōu)化技術(shù)介紹。第四章詳細(xì)介紹了sql server數(shù)據(jù)庫性能調(diào)整與優(yōu)化的相關(guān)技術(shù),包括數(shù)據(jù)庫邏輯結(jié)構(gòu)和物理結(jié)構(gòu)的優(yōu)化、sql語句優(yōu)化、合適索引的創(chuàng)建、sql server分區(qū)技術(shù)等等。第五章開發(fā)了一個商品訂單管理系統(tǒng)作為測試用例,對如何優(yōu)化數(shù)據(jù)庫的性能進(jìn)行具體的測試和分析。第六章總結(jié)全文,肯定了數(shù)據(jù)庫性能調(diào)整的應(yīng)用價值。2 數(shù)據(jù)庫性能優(yōu)化架構(gòu)2.1性能調(diào)整與優(yōu)化概述性能調(diào)整(performance tuning)是一項活動,這項活動通過優(yōu)化應(yīng)用程序、修改系統(tǒng)參數(shù)、改變系統(tǒng)配置(硬件調(diào)整)來改變系統(tǒng)性能。性能調(diào)整包括對硬件配置操作系統(tǒng)(os)與關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(rd

26、bms)配置,以及對訪問這些組件的應(yīng)用的詳細(xì)分析與優(yōu)化。系統(tǒng)性能的判定標(biāo)準(zhǔn)依賴于性能衡量的研究,通常認(rèn)為性能的指標(biāo)可以通過處理一個事務(wù)所需的i/o量、cpu時間量、以及響應(yīng)時間來衡量。性能會隨特定環(huán)境的不同而變化,并受應(yīng)用程序、體系結(jié)構(gòu)和資源、服務(wù)器以及并發(fā)活動的具體情況影響。性能調(diào)整的一個主要目標(biāo)是消除瓶頸。瓶頸(bottle neck)是性能限制的重要因素,它可以是硬件或軟件,如果不是在正確配置和調(diào)整的系統(tǒng)中,就會嚴(yán)重地影響系統(tǒng)性能。減少瓶頸可以最大地發(fā)揮一個系統(tǒng)的性能。為有效地對系統(tǒng)進(jìn)行調(diào)整,必須遵循一套特定的步驟或方法,去調(diào)整和優(yōu)化系統(tǒng)中的所有組件,包括應(yīng)用、硬件與sql server

27、。首先,討論將涉及系統(tǒng)調(diào)整的不同組件。在本章后面部分,著重介紹性能調(diào)整的方法論。2.2數(shù)據(jù)庫優(yōu)化的目標(biāo)有不同的方式確定性能調(diào)整工作的目標(biāo)。數(shù)據(jù)庫應(yīng)用系統(tǒng)可以用各種定量的方法分析,其中最重要指標(biāo)如下:2.2.1提高系統(tǒng)的吞吐量吞吐量是指給定時間內(nèi)服務(wù)器能夠處理的查詢總數(shù),即每個單元時間完成的工作,以每秒鐘的事務(wù)量(tps)表示;該值越高越好。提高系統(tǒng)的吞吐量也有兩種方法:l 在同樣的資源環(huán)境下做更多的工作(通過減少服務(wù)時間);l 通過減少總的響應(yīng)時間使工作做得更快。要做到這一點,可以將用戶等待的資源加倍,如系統(tǒng)受到cpu限制,則可以增加cpu的數(shù)量。在任何一個系統(tǒng)中,吞吐量和反應(yīng)時間作為調(diào)整目標(biāo)

28、通常是互相對立的。如果反應(yīng)時間長(壞),吞吐量或許高(好)。如果吞吐量低(壞),反應(yīng)時間或許短(好)。多數(shù)的并發(fā)用戶在一定時間內(nèi)使用一個系統(tǒng),每個用戶很有可能比平時要經(jīng)歷更長的延遲,但是通過系統(tǒng)的事務(wù)數(shù)量將會更大。相反,假如減少在某一個時間窗口中訪問系統(tǒng)的并發(fā)用戶數(shù)量,以在該時間內(nèi)完成的全部事務(wù)量減少為代價,每個用戶將會享受到更快的反應(yīng)時間?,F(xiàn)在考慮一個為客戶預(yù)定體育比賽門票的公司。如果該公司的營業(yè)時間為每天8小時,并且在銷售市場體育比賽門票的第一天必須賣出25000張門票,那么該公司的門票預(yù)定系統(tǒng)的吞吐量必須等于或大于每小時3125筆事務(wù)。吞吐量=(25000筆事務(wù)/8小時)=3125筆事務(wù)

29、/小時,或52.1筆事務(wù)/分鐘。當(dāng)然,以8小時的時間間隔來計算系統(tǒng)需要達(dá)到的吞吐量是不現(xiàn)實的,因為并不是所有需求都是勻速到達(dá)系統(tǒng)。在設(shè)計系統(tǒng)軟硬件規(guī)模和規(guī)劃系統(tǒng)能力時,我們是根據(jù)系統(tǒng)最忙碌的時間段來計算系統(tǒng)所要達(dá)到的吞吐量的。這是設(shè)計數(shù)據(jù)庫系統(tǒng)的一條著名規(guī)律:為最糟糕的情況設(shè)計系統(tǒng)的軟硬件規(guī)模。2.2.2縮短系統(tǒng)的響應(yīng)時間系統(tǒng)響應(yīng)時間是指從用戶按下最后一個提交按鈕到所有數(shù)據(jù)都顯示在顯示設(shè)備上所花費的時間。以毫秒或秒表示,該值越低越好。系統(tǒng)響應(yīng)時間的實質(zhì)就是終端用戶為等待后臺事務(wù)處理所花費時間。響應(yīng)時間通常也稱為用戶收到查詢正被處理的直觀確認(rèn)時刻所感知的時間長度。數(shù)據(jù)庫用戶響應(yīng)時間又可以分為系統(tǒng)

30、服務(wù)時間和用戶等待時間兩項,即:數(shù)據(jù)庫用戶響應(yīng)時間=系統(tǒng)服務(wù)時間+用戶等待時間。因此,獲得滿意的用戶響應(yīng)時間有兩個途徑:l 減少系統(tǒng)服務(wù)時間,即提高數(shù)據(jù)庫的吞吐量。l 減少用戶等待時間,即減少用戶訪問同一數(shù)據(jù)庫資源的沖突率。盡管某些數(shù)據(jù)庫系統(tǒng)需要實現(xiàn)系統(tǒng)可能達(dá)到的最高吞吐量,但另一些系統(tǒng)可能有嚴(yán)格的系統(tǒng)響應(yīng)時間要求。在這種環(huán)境中,漫長的系統(tǒng)響應(yīng)時間常常意味著客戶只能在線等待,這將阻礙其他用戶使用系統(tǒng)。這種情況往往意味著失掉商機,所以縮短系統(tǒng)響應(yīng)時間是非常重要的。對于那些對響應(yīng)時間有嚴(yán)格要求的系統(tǒng),必須采取不同的方法對系統(tǒng)進(jìn)行調(diào)整。為了縮短系統(tǒng)響應(yīng)時間,可以使系統(tǒng)以遠(yuǎn)低于其實際吞吐能力的吞吐量運

31、行或是將批理作業(yè)放在非營業(yè)時間內(nèi)處理。2.3性能調(diào)整的步驟不少人認(rèn)為數(shù)據(jù)庫應(yīng)用系統(tǒng)的性能調(diào)整是在系統(tǒng)運行出現(xiàn)問題時才進(jìn)行的,其實,這種看法是片面的。性能調(diào)整和優(yōu)化工作是在進(jìn)行系統(tǒng)計劃和設(shè)計階段就已經(jīng)開始了,并且一直貫穿系統(tǒng)的運行周期。在計劃階段就仔細(xì)地考慮性能調(diào)整工作,這會大大減輕系統(tǒng)運行后的性能調(diào)整工作。在數(shù)據(jù)庫的性能調(diào)整過程中需要應(yīng)用程序設(shè)計人員、應(yīng)用程序開發(fā)人員、數(shù)據(jù)庫管理員以及系統(tǒng)管理員共同完成。下面以優(yōu)先順序給出性能調(diào)整的步驟:2.3.1優(yōu)化業(yè)務(wù)邏輯為了得到最佳的性能,在數(shù)據(jù)庫設(shè)計過程中要采用業(yè)務(wù)邏輯。這就關(guān)系到對整個系統(tǒng)的高層分析和設(shè)計。像是否在系統(tǒng)范圍內(nèi)采用線程服務(wù)器這樣的配置問

32、題就是這一階段需要考慮的問題。這樣設(shè)計者將性能要求同具體的業(yè)務(wù)需求直接聯(lián)系起來。2.3.2調(diào)整數(shù)據(jù)結(jié)構(gòu)設(shè)計在數(shù)據(jù)設(shè)計階段,設(shè)計人員必須決定哪些數(shù)據(jù)是應(yīng)用所需的,同時還要考慮哪些關(guān)系是重要的,以及它們的屬性是什么,還要確定哪些屬性可以作為主鍵(primary key)或外鍵(foreign key)。最后,要構(gòu)造好信息來更好地滿足性能目標(biāo)。這一階段需要對數(shù)據(jù)進(jìn)行仔細(xì)分析,避免數(shù)據(jù)冗余,同時要考慮合理分布數(shù)據(jù),以防止數(shù)據(jù)存取的擁擠,如是否使用數(shù)據(jù)庫的分區(qū)功能,以及對于經(jīng)常訪問的數(shù)據(jù)庫表是否需要建立局部還是全局索引等。2.3.3優(yōu)化數(shù)據(jù)庫的邏輯結(jié)構(gòu)這一階段就是通過增加、減少或調(diào)整邏輯結(jié)構(gòu),如考慮在主

33、鍵和外鍵上建立索引之外增加其它索引以提高系統(tǒng)性能。2.3.4優(yōu)化數(shù)據(jù)庫的操作這一階段主要是在優(yōu)化數(shù)據(jù)庫服務(wù)器之前,首先確保在應(yīng)用中已充分利用了為了提高性能而設(shè)計的sql以及其中的一些特殊功能。如在sql server數(shù)據(jù)庫中的數(shù)組的處理、sql優(yōu)化器、行級鎖管理以及sql server查詢分析器等。應(yīng)用程序的執(zhí)行最終將歸結(jié)為數(shù)據(jù)庫中的sql語句執(zhí)行,因此sql語句的執(zhí)行效率最終決定了數(shù)據(jù)庫的性能。3 性能優(yōu)化技術(shù)介紹3.1數(shù)據(jù)庫結(jié)構(gòu)優(yōu)化一個數(shù)據(jù)庫系統(tǒng)的生命周期可以分成:設(shè)計、開發(fā)和成品三個階段。在設(shè)計階段進(jìn)行數(shù)據(jù)庫性能優(yōu)化的成本最低,收益最大。在成品階段進(jìn)行數(shù)據(jù)庫性能優(yōu)化的成本最高,收益最小。

34、要在sql server方案中實現(xiàn)最優(yōu)的性能,最關(guān)鍵的是要有一很好的數(shù)據(jù)庫設(shè)計方案。在實際工作中,許多sql server方案往往是由于數(shù)據(jù)庫設(shè)計得不好導(dǎo)致性能很差。所以,要實現(xiàn)良好的數(shù)據(jù)庫設(shè)計就必須考慮這些問題。3.1.1數(shù)據(jù)庫邏輯結(jié)構(gòu)的優(yōu)化一般來說,邏輯數(shù)據(jù)庫設(shè)計的不合理容易產(chǎn)生以下問題,數(shù)據(jù)冗余、更新異常、插入異常、刪除異常。所以邏輯數(shù)據(jù)庫設(shè)計至少應(yīng)滿足規(guī)范化的前3級標(biāo)準(zhǔn):第1規(guī)范:沒有重復(fù)的元組或多值的列。第2規(guī)范:每個非關(guān)鍵字段必須依賴于主關(guān)鍵字,不能依賴于1個組合式主關(guān)鍵字的某些組成部分。第3規(guī)范:每個非關(guān)鍵字段必須依賴于主關(guān)鍵字,不能依賴于1個組合式主關(guān)鍵字的某些組成部分,也不能

35、依賴于另1個非關(guān)鍵字段。遵守這些規(guī)則的設(shè)計會產(chǎn)生較少的列和更多的表,因而也就減少了數(shù)據(jù)冗余,也減少了用于存儲數(shù)據(jù)的頁。但表關(guān)系也許需要通過復(fù)雜的合并來處理,這樣會降低系統(tǒng)的性能。某種程度上的非規(guī)范化可以改善系統(tǒng)的性能,非規(guī)范化過程可以根據(jù)性能方面不同的考慮用多種不同的方法進(jìn)行,所在在進(jìn)行數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計時應(yīng)綜合考慮數(shù)據(jù)冗余和基于連接的查詢帶來的性能問題。3.1.2數(shù)據(jù)庫物理存儲結(jié)構(gòu)的優(yōu)化數(shù)據(jù)文件和日志文件的位置和分布對系統(tǒng)的性能非常重要。數(shù)據(jù)庫設(shè)計的兩條關(guān)鍵性的指導(dǎo)原則如下:將序列訪問的文件分離到專用的磁盤上,并通過將數(shù)據(jù)文件分散到各個磁盤上而允許并行i/o。1.與每個表列相關(guān)的數(shù)據(jù)類型應(yīng)該

36、反映數(shù)據(jù)所需的最小存儲空間,特別是對于被索引的列更是如此。比如能使用smallint類型就不要用int類型,這樣索引字段可以被更快地讀取,而且可以在1個數(shù)據(jù)頁上放置更多的數(shù)據(jù)行,因而也就減少了i/o操作。2.l server分區(qū)技術(shù)把一個頻繁使用的大表分割開,并放在多個單獨的智能型磁盤控制器的數(shù)據(jù)庫設(shè)備上,這樣也可以提高性能。因為有多個磁頭在查找,所以數(shù)據(jù)分離也能提高性能,sql server的分區(qū)技術(shù)將在下面講到。3.sql server段把文本或圖像列的數(shù)據(jù)存放在1個單獨的物理設(shè)備上可以提高性能。1個專用的智能型的控制器能進(jìn)一步提高性能。3.1.3使用分區(qū)超大型數(shù)據(jù)庫的大小常常達(dá)到數(shù)百gb

37、,有時甚至要用tb來計算。而單表的數(shù)據(jù)量往往會達(dá)到上億的記錄,并且記錄數(shù)會隨著時間而增長。這不但影響著數(shù)據(jù)庫的運行效率,也增大數(shù)據(jù)庫的維護(hù)難度。除了表的數(shù)據(jù)量外,對表不同的訪問模式也可能會影響性能和可用性。這些問題都可以通過對大表進(jìn)行合理分區(qū)得到很大的改善。當(dāng)表和索引變得非常大時,分區(qū)可以將數(shù)據(jù)分為更小、更容易管理的部分來提高系統(tǒng)的運行效率。如果系統(tǒng)有多個cpu或是多個磁盤子系統(tǒng),可以通過并行操作獲得更好的性能。所以對大表進(jìn)行分區(qū)是處理海量數(shù)據(jù)的一種十分高效的方法。下面通過一個具體實例,介紹如何創(chuàng)建和修改分區(qū)表,以及如何查看分區(qū)表。分區(qū)功能是sql server 2005新增的一個功能,表分區(qū)

38、分為水平分區(qū)和垂直分區(qū)。水平分區(qū)將表分為多個表。每個表包含的列數(shù)相同,但是行更少。例如,可以將一個包含十億行的表水平分區(qū)成12個表,每個小表表示特定年份內(nèi)一個月的數(shù)據(jù)。任何需要特定月份數(shù)據(jù)的查詢只需引用相應(yīng)月份的表。而垂直分區(qū)則是將原始表分成多個只包含較少列的表。水平分區(qū)是最常用分區(qū)方式,本文以水平分區(qū)來介紹具體實現(xiàn)方法。平分區(qū)常用的方法是根據(jù)時期和使用對數(shù)據(jù)進(jìn)行水平分區(qū)。例如本文例子,一個短信發(fā)送記錄表包含最近一年的數(shù)據(jù),但是只定期訪問本季度的數(shù)據(jù)。在這種情況下,可考慮將數(shù)據(jù)分成四個區(qū),每個區(qū)只包含一個季度的數(shù)據(jù)。下面具體介紹一下使用分區(qū)表的方法。1.建文件組立分區(qū)表先要創(chuàng)建文件組,而創(chuàng)建多

39、個文件組主要是為了獲得好的i/o平衡。一般情況下,文件組數(shù)最好與分區(qū)數(shù)相同,并且這些文件組通常位于不同的磁盤上。每個文件組可以由一個或多個文件構(gòu)成,而每個分區(qū)必須映射到一個文件組。一個文件組可以由多個分區(qū)使用。為了更好地管理數(shù)據(jù)(例如,為了獲得更精確的備份控制),對分區(qū)表應(yīng)進(jìn)行設(shè)計,以便只有相關(guān)數(shù)據(jù)或邏輯分組的數(shù)據(jù)位于同一個文件組中。使用alter database,添加邏輯文件組名:aer databasedeandbadd filegroupfg1dandb為數(shù)據(jù)庫名稱,fg1文件組名。創(chuàng)建文件組后,再使用alter database將文件添加到該文件組中。ater databasedea

40、ndbadd file(name='fg1',filename='c:deandatafg1.ndf',size=3072kb,filegrowth=1024kb)to filegroupfg1類似的建立四個文件和文件組,并把每一個存儲數(shù)據(jù)的文件放在不同的磁盤驅(qū)動器里。2.創(chuàng)建分區(qū)函數(shù)創(chuàng)建分區(qū)表必須先確定分區(qū)的功能機制,表進(jìn)行分區(qū)的標(biāo)準(zhǔn)是通過分區(qū)函數(shù)來決定的。創(chuàng)建數(shù)據(jù)分區(qū)函數(shù)有range“l(fā)eft|/right”兩種選擇。代表每個邊界值在局部的哪一邊。例如存在四個分區(qū),則定義三個邊界點值,并指定每個值是第一個分區(qū)的上邊界(left)還是第二個分區(qū)的下邊界(rig

41、ht)。代碼如下:create partition functionsendsmspf(datetime)as range right for values('20070401','20070701','20071001')3.創(chuàng)建分區(qū)方案創(chuàng)建分區(qū)函數(shù)后,必須將其與分區(qū)方案相關(guān)聯(lián),以便將分區(qū)指向至特定的文件組。就是定義實際存放數(shù)據(jù)的媒體與各數(shù)據(jù)塊的對應(yīng)關(guān)系。多個數(shù)據(jù)表可以共用相同的數(shù)據(jù)分區(qū)函數(shù),一般不共用相同的數(shù)據(jù)分區(qū)方案??梢酝ㄟ^不同的分區(qū)方案,使用相同的分區(qū)函數(shù),使不同的數(shù)據(jù)表有相同的分區(qū)條件,但存放在不同的媒介上。創(chuàng)建分區(qū)方案的代碼如下:c

42、reate partition schemesendsmsps as partitionsendsmspf to (fg1,fg2,fg3,fg4) 4.創(chuàng)建分區(qū)表建立好分區(qū)函數(shù)和分區(qū)方案后,就可以創(chuàng)建分區(qū)表了。分區(qū)表是通過定義分區(qū)鍵值和分區(qū)方案相聯(lián)系的。插入記錄時,sql server會根據(jù)分區(qū)鍵值的不同,通過分區(qū)函數(shù)的定義將數(shù)據(jù)放到相應(yīng)的分區(qū)。從而把分區(qū)函數(shù)、分區(qū)方案和分區(qū)表三者有機的結(jié)合起來。創(chuàng)建分區(qū)表的代碼如下:create table sendsmslog(idintidentity(1,1)not null,idnumnvarchar(50)null,sendcontenttext

43、nullsenddatedatetimenotnull,)on sendsmsps(senddate)5.查看分區(qū)表信息系統(tǒng)運行一段時間或者把以前的數(shù)據(jù)導(dǎo)入分區(qū)表后,我們需要查看數(shù)據(jù)的具體存儲情況,即每個分區(qū)存取的記錄數(shù),那些記錄存取在那個分區(qū)等。我們可以通過$partition.sendsmspf來查看,代碼如下:select$partition.sendsmspf(o.senddate)aspartition number,min(o.senddate)asmin senddate,max(o.senddate)asmax senddate,count(*)asrows in partit

44、ionfrom dbo.sendsmslog as ogroup by$partition.sendsmspf(o.senddate)order bypartition number6.維護(hù)分區(qū)分區(qū)的維護(hù)主要設(shè)計分區(qū)的添加、減少、合并和在分區(qū)間轉(zhuǎn)換。可以通過alter partition function的選項split,merge和alter table的選項switch來實現(xiàn)。split會多增加一個分區(qū),而megre會合并或者減少分區(qū),switch則是邏輯地在組間轉(zhuǎn)換分區(qū)。3.2 sql查詢語句的優(yōu)化數(shù)據(jù)庫的優(yōu)化通常可以通過對網(wǎng)絡(luò)、硬件、操作系統(tǒng)、數(shù)據(jù)庫參數(shù)和應(yīng)用程序的優(yōu)化來進(jìn)行。最常見的

45、優(yōu)化手段就是對硬件的升級。根據(jù)統(tǒng)計,對網(wǎng)絡(luò)、硬件、操作系統(tǒng)、數(shù)據(jù)庫參數(shù)進(jìn)行優(yōu)化所獲得的性能提升,全部加起來只占數(shù)據(jù)庫系統(tǒng)性能提升的40%左右,其余的60%系統(tǒng)性能提升來自對應(yīng)用程序的優(yōu)化。許多優(yōu)化專家認(rèn)為,對應(yīng)用程序的優(yōu)化可以得到80%的系統(tǒng)性能的提升。應(yīng)用程序的優(yōu)化通常可分為兩個方面:源代碼和sql語句。由于涉及到對程序邏輯的改變,源代碼的優(yōu)化在時間成本和風(fēng)險上代價很高,而對數(shù)據(jù)庫系統(tǒng)性能的提升收效有限。所以sql語句的優(yōu)化對數(shù)據(jù)庫系統(tǒng)的性能起著決定性的作用。sql語言是一種靈活的語言,相同的功能可以使用不同的語句來實現(xiàn),但是語句的執(zhí)行效率是很不相同的。程序員可以通過查看查詢計劃來比較各種實

46、現(xiàn)方案,并選出最優(yōu)的實現(xiàn)方案??偟脕碇v,程序員寫sql語句需要滿足考慮如下規(guī)則:3.2.1合理使用索引索引是一種供服務(wù)器在表中快速查找一個行的數(shù)據(jù)庫結(jié)構(gòu)。在關(guān)系數(shù)據(jù)庫中,一個行的物理位置無關(guān)緊要,除非數(shù)據(jù)庫需要找到它。為了能找到數(shù)據(jù)。表中的每一行均用一個rowid來標(biāo)識,rowid告訴數(shù)據(jù)庫這一行的準(zhǔn)確位置(指出行所在的文件、該文件中的塊、該塊中的行地址)。每一個索引條目都由一個鍵值和rowid組成??梢运饕粋€列或一組列,sql server用b樹結(jié)構(gòu)存儲索引條目,以保證用最短路徑訪問鍵值,當(dāng)一個查詢訪問索引時,就能找到與查詢條件相匹配的索引條目。與條目相匹配的rowid值指向sql ser

47、ver提供相關(guān)行的物理位置,以減輕定位數(shù)據(jù)所需要的i/o負(fù)擔(dān)。從大多數(shù)系統(tǒng)應(yīng)用實例來看,查詢操作在各種數(shù)據(jù)庫的操作中,所占的比重最大。索引是數(shù)據(jù)庫的重要的數(shù)據(jù)結(jié)構(gòu),它的根本目的就是為了提高查詢速度。實踐證明在數(shù)據(jù)庫編程中,合理使用索引文件,對于改善數(shù)據(jù)查詢速度有著舉足輕重的作用,可以極大改善數(shù)據(jù)庫應(yīng)用程序的性能。在應(yīng)用過程中,用戶的查詢條件可能是多種多樣的,如果能根據(jù)用戶查詢建立和選擇索引,對于保證應(yīng)用程序的性能很有幫助。1.索引的使用要恰到好處,一般使用的原則為:(1)為主鍵所在的列創(chuàng)建索引。為經(jīng)常進(jìn)行連接,但是沒有指定為外鍵的字段建立索引,而不經(jīng)常連接的字段由數(shù)據(jù)庫優(yōu)化器自動建立索引。(2

48、)在頻繁進(jìn)行排序或分組(即使用group by或order by操作)的字段上建立索引。(3)在條件表達(dá)式中經(jīng)常用到的不同值較多的字段上建立索引,在不同值較少的字段上不要建立索引,如性別字段就不需要建立索引。不要在在查詢很少引用的列上創(chuàng)建索引。(4)如果經(jīng)常同時使用多個字段排序,可以在這些字段上建立復(fù)合索引。要盡量使關(guān)鍵查詢形成索引覆蓋,其前導(dǎo)字段一定是使用最頻繁的字段。(5)查看索引并刪除不使用的索引,維護(hù)索引需要一定的硬盤空間和時間,需要頻繁進(jìn)行數(shù)據(jù)查入操作的數(shù)據(jù)庫應(yīng)該有較少的索引,需要頻繁進(jìn)行讀取操作的數(shù)據(jù)庫應(yīng)該有更多的索引。(6)在聚集索引中,避免包括不必要的列,盡可能使用較小的數(shù)據(jù)類

49、型,例如用varchar代替char。(7)考慮使用聚集索引來支持排序和范圍查詢,在為數(shù)據(jù)檢索而優(yōu)化表的時候,聚集索引應(yīng)該支持對記錄組的檢索。為了聚集鍵選擇列或列組,其中聚集鍵根據(jù)需要經(jīng)常排序的排序數(shù)據(jù)或?qū)Ρ仨氁黄鹪L問的記錄進(jìn)行分組。(8)具有高選擇性的列是索引的好候選列,具有高密度的列是索引最糟糕的候選列。2.維護(hù)索引在創(chuàng)建索引后,必須維護(hù)索引以確??梢垣@得最佳的性能。經(jīng)過一段時間后,數(shù)據(jù)會變得支離破碎,要根據(jù)組織環(huán)境對數(shù)據(jù)碎片進(jìn)行整理。sql server 2000索引優(yōu)化向?qū)且粋€你會馬上喜歡上的工具。雖然并不完美,但是這個工具可以評估查詢運行性能,并基于查詢,提出數(shù)據(jù)表上是否該添加聚集

50、/非聚集索引的建議。索引優(yōu)化向?qū)г趕ql server 2000事件探查器的“工具”菜單下可以找到。使用索引優(yōu)化向?qū)?,首先要?chuàng)建工作負(fù)載。工作負(fù)載表示一個事件跟蹤或者t-sql腳本。在很多情況下,你應(yīng)該選擇使用事件跟蹤,因為它反應(yīng)了真實的數(shù)據(jù)庫行為。工作負(fù)載的創(chuàng)建必須能體現(xiàn)一段時間內(nèi)每天數(shù)據(jù)庫使用的情況。這樣,索引優(yōu)化向?qū)Ь涂梢曰谶@些實際運行的統(tǒng)計行為來提出有用的建議。當(dāng)工作負(fù)載創(chuàng)建后,索引優(yōu)化向?qū)Ь秃芨櫵?。索引?yōu)化向?qū)龅木褪菑墓ぷ髫?fù)載中提取行為樣本,然后利用查詢優(yōu)化器進(jìn)行分析。一旦索引優(yōu)化向?qū)Х治鐾旯ぷ髫?fù)載后(如果工作負(fù)載很大,這會運行幾個小時那么長),基于對工作負(fù)載的分析,提出最

51、佳的聚集/非聚集索引建議。另外,如果數(shù)據(jù)庫上已經(jīng)有索引了,并且索引優(yōu)化向?qū)Оl(fā)現(xiàn)這些索引不是最佳的,那么會建議你移除。3在數(shù)據(jù)庫中放置索引用戶可以指定一個表的索引放置的位置。一個表的索引就該放置在與數(shù)據(jù)表不同的物理磁盤上,這樣可以減少文件之間的磁盤爭用。3.2.2優(yōu)化sql語句的一些具體策略1.應(yīng)用程序中,保證在實現(xiàn)功能的基礎(chǔ)上,盡量減少對數(shù)據(jù)庫的訪問次數(shù);通過搜索參數(shù),盡量減少對表的訪問行數(shù),最小化結(jié)果集,從而減輕網(wǎng)絡(luò)負(fù)擔(dān);能夠分開的操作盡量分開處理,提高每次的響應(yīng)速度;在數(shù)據(jù)窗口使用sql時,盡量把使用的索引放在選擇的首列。2.算法的結(jié)構(gòu)盡量簡單;在查詢時,不要過多地使用通配符如select

52、 * from t1語句,要用到幾列就選擇幾列,如:select col1,col2 from t1;在可能的情況下盡量限制結(jié)果集行數(shù),如:select top 300 col1,col2,col3 from t1,因為某些情況下用戶是不需要那么多的數(shù)據(jù)的。不要在應(yīng)用中使用數(shù)據(jù)庫游標(biāo),游標(biāo)是非常有用的工具,但比使用常規(guī)的、面向集的sql語句需要更大的開銷;按照特定順序提取數(shù)據(jù)的查找。3.避免使用不兼容的數(shù)據(jù)類型。例如float和int、char和varchar、binary和varbinary是不兼容的。數(shù)據(jù)類型的不兼容可能使優(yōu)化器無法執(zhí)行一些本來可以進(jìn)行的優(yōu)化操作。例如:select nam

53、e from employee where salary60000在這條語句中,如salary字段是money型的,則優(yōu)化器很難對其進(jìn)行優(yōu)化,因為60000是個整型數(shù)。我們應(yīng)當(dāng)在編程時將整型轉(zhuǎn)化成為貨幣型,而不要等到運行時轉(zhuǎn)化。4.盡量避免在where子句中對字段進(jìn)行函數(shù)或表達(dá)式操作,這將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描。如:(1)select * from t1 where f1/2=100應(yīng)改為:select * from t1 where f1=100*2(2)select * from record where substring(card_no,1,4)=5378應(yīng)改為:selec

54、t * from record where card_no like5378%(3)select member_number,first_name,last_name from members wheredatediff(yy,datofbirth,getdate()>21應(yīng)改為:select member_number,first_name,last_name from members wheredateofbirth<dateadd(yy,-21,getdate()即:任何對列的操作都將導(dǎo)致表掃描,它包括數(shù)據(jù)庫函數(shù)、計算表達(dá)式等等,查詢時要盡可能將操作移至等號右邊。5.避免使用

55、!=或、is null或is not null、in,not in等這樣的操作符,因為這會使系統(tǒng)無法使用索引,而只能直接搜索表中的數(shù)據(jù)。例如:select id from employee where id!='b%'優(yōu)化器將無法通過索引來確定將要命中的行數(shù),因此需要搜索該表的所有行。6.盡量使用數(shù)字型字段,一部分開發(fā)人員和數(shù)據(jù)庫管理人員喜歡把包含數(shù)值信息的字段設(shè)計為字符型,這會降低查詢和連接的性能,并會增加存儲開銷。這是因為引擎在處理查詢和連接回逐個比較字符串中每一個字符,而對于數(shù)字型而言只需要比較一次就夠了。7.合理使用exists、not exists子句。如下所示:(1

56、).select sum(t1.c1)from t1 where(select count(*)fromt2 where t2.c2=t1.c2)>0(2).select sum(t1.c1)from t1 where exists(select*from t2where t2.c2=t1.c2)兩者產(chǎn)生相同的結(jié)果,但是后者的效率顯然要高于前者。因為后者不會產(chǎn)生大量鎖定的表掃描或是索引掃描。8.如果你想校驗表里是否存在某條記錄,不要用count(*)那樣效率很低,而且浪費服務(wù)器資源??梢杂胑xists代替。如:if(select count(*)from table_name where column_name='xxx')>0可以寫成:if exists(select*from table_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論