項目17 數(shù)據(jù)庫性能優(yōu)化_第1頁
項目17 數(shù)據(jù)庫性能優(yōu)化_第2頁
項目17 數(shù)據(jù)庫性能優(yōu)化_第3頁
項目17 數(shù)據(jù)庫性能優(yōu)化_第4頁
項目17 數(shù)據(jù)庫性能優(yōu)化_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

付費下載

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

項目17數(shù)據(jù)庫性能優(yōu)化專業(yè)核心課程精品課程1

17.1數(shù)據(jù)庫設計17.1.1?規(guī)范化與非規(guī)范化

規(guī)范化(normalization)就是讓數(shù)據(jù)庫中無序的數(shù)據(jù)變得更加有條理,表中的數(shù)據(jù)都在合理的位置。范式的規(guī)則有很多種,這里主要介紹3種常用的范式:第一范式(1NF)的規(guī)則要求為:數(shù)據(jù)表中的字段只包含一種數(shù)據(jù)類型,每種數(shù)據(jù)只存放在一個地方。第二范式(2NF)的要求是保證表中包含一個唯一的實體數(shù)據(jù)。第三范式(3NF)要求表中所有非關鍵字段相互獨立,表中任意字段內容進行更改不會影響其他字段。17.1.2?選擇適當?shù)臄?shù)據(jù)類型

選擇可以存儲數(shù)據(jù)的最小數(shù)據(jù)類型盡量使用簡單的數(shù)據(jù)類型精品課程2

17.1數(shù)據(jù)庫設計17.1.2?選擇適當?shù)臄?shù)據(jù)類型

盡量避免NULL17.1.3?索引的選擇建立索引是以最小的消耗(包括各種資源的消耗,如內存、數(shù)據(jù)庫10資源等)得到所需數(shù)據(jù)的有效方法。對于每一個查詢,SQLServer優(yōu)化器將確定是否有相關的索引可以用于數(shù)據(jù)訪問。一個利用索引的訪問與全表掃描相比,可以大大減少查詢時間。索引可分為聚集索引與非聚集索引兩種,前者對數(shù)據(jù)進行物理排序,速度快,但一個表只能建立一個;后者僅對數(shù)據(jù)進行邏輯排序,速度相對聚集索引慢,但一個表可以建立多個。精品課程3

17.2查詢優(yōu)化17.2.1?避免使用“*”在具體應用中,查詢語句SELECT是使用最為頻繁的一類操作。雖然SELECT語句有許多參數(shù),但目標列是必不可少的,許多用戶為了節(jié)省時間或為了方便,不考慮需要查詢的數(shù)據(jù)表有多少列,在目標列處直接以通配符“%”代替。這類操作在查詢數(shù)據(jù)量小的表或視圖時對性能的影響非常小,但一旦數(shù)據(jù)量較大時,以通配符“%”代替所有目標列名將大大降低SQLServer2016的查詢性能。17.2.2?避免負邏輯任何負邏輯(如!=、<>或notin)都將導致SQLServer2016用表掃描來完成查詢。當表較大時,這會嚴重影響性能。精品課程4

17.2查詢優(yōu)化17.2.3?列操作

WHERE子句中列旁邊的任何操作都將導致SQLServer2016用表掃描來完成查詢。17.2.4?避免使用DISTINCT使用DISTINCT是為了保證在結果集中不出現(xiàn)重復值,但是DISTINCT關鍵字會產生一張工作表,并進行排序以刪除重復記錄,這會大大增加查詢時間和VO的次數(shù)。因此應盡量避免使用DIST1NCT。17.2.5?存儲過程存儲過程使分析和編譯后的SQL程序包含巨大而復雜的查詢或SQL操作,經過編譯后存儲在SQL數(shù)據(jù)庫中,客戶應用程序通過引用其名稱進行調用。存儲過程在第一次執(zhí)行時建立優(yōu)化的查詢方案,SQLServer將查詢方案保存在高速緩存中,在接下來的運行中就可以直接從高速緩存執(zhí)行。精品課程5

17.3考慮并行17.3考慮并行

數(shù)據(jù)庫系統(tǒng)的并發(fā)控制也是影響性能的一個重要方面。為了避免多個用戶同時操作可能導致的數(shù)據(jù)不一致,SQLServer采用了封鎖機制。SQLServer中的鎖可分為以下3種:共享鎖(SharedLock):由讀取頁的進程所使用。共享鎖只在特定頁的讀取過程中有效。修改鎖(UpdateLock):用于將要修改數(shù)據(jù)的進程,當數(shù)據(jù)發(fā)生變化時,修改鎖自動改為獨占鎖。獨占鎖(ExclusiveLock):用于當前正在修改數(shù)據(jù)的進程。獨占鎖作用于所有影響到的頁上,直至事務結束。精品課程6

17.4索引操作17.4.1?避免在索引列上進行運算

雖然建立索引后對表或視圖的檢索操作將不需要全表掃描了,但是如果在SELECT語句的WHERE子句中,索引列是函數(shù)的一部分,或者在索引列上進行了運算,Oracle優(yōu)化器將不使用索引而仍將使用全表掃描,此時索引將不起作用。17.4.2?避免在索引列上用OR運算符如果在SELECT語句中需要對索引列進行OR(邏輯或)操作,此時索引將不會被引用。也就是說,對索引列使用OR運算符將造成全表掃描。17.4.3?避免在索引列

溫馨提示

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

評論

0/150

提交評論