課程目錄

一、SQL Server開發(fā)必備課程介紹

1.1、SQL Server開發(fā)必備課程介紹在日常生活中,我們經(jīng)常需要使用數(shù)據(jù)庫來處理許多事情,許多管理系統(tǒng)都是建立在數(shù)據(jù)庫的基礎(chǔ)上的,數(shù)據(jù)庫作為我們?nèi)粘9ぷ髦斜貍淇缮俚囊婚T技能,開發(fā)人員必須掌握這門核心技能才能算優(yōu)秀 。本課程是收錄阿笨在工作中的一些總結(jié)的關(guān)于SQL SERVER的實戰(zhàn)開發(fā)技能知識, 所以課程知識點有點“凌亂”,希望能夠?qū)嶋H的幫助到大家。

身為一名C#高級開發(fā)人員,這些數(shù)據(jù)庫合知識不掌握不合適!

福利:本次課程會不斷的補充新的知識點,到時候也會給大家進行分享。關(guān)于如何快速的提升SQL SERVER技能,阿笨總結(jié)了一下:多想,多看,多練。只有這樣理論+實戰(zhàn)才能做到熟練生巧,得心應(yīng)手的地步。

本次分享課程適合人群和學習方式:

1)、必須具備一定的SQL SERVER基礎(chǔ)知識(新手慎入)。

2)、必須做到一看,二思,三練習。

廢話不多說,直接上干貨。我們不生產(chǎn)干貨,我們只是干貨的搬運工。

二、課程包含知識點如下

SQL Server數(shù)據(jù)庫開發(fā)必備技能實戰(zhàn)(第一章)

1、你必須了解SQL Server查詢語句執(zhí)行順序

2、SQL Server批量(整體)更新兩個關(guān)聯(lián)表數(shù)據(jù)的方法

3、SQL Server批量(部分)更新兩個關(guān)聯(lián)表數(shù)據(jù)的方法

4、SQL Server表變量和表類型

5、SQL Server XML類型變量

6、SQL SERVER存儲過程批量導(dǎo)入和更新數(shù)據(jù)(數(shù)據(jù)同步)

SQL Server數(shù)據(jù)庫開發(fā)必備技能實戰(zhàn)(第二章)

2.1、一圖搞懂SQL Server中的各種關(guān)聯(lián)

2.2、SQL Server臨時表

2.3、SQL Server中Merge子句

2.4、SQL Server中OUTPUT子句

2.5、SQL Server中CTE表達式

2.6、SQL Server CONCAT和FORMAT函數(shù)

2.7、SQL Server時間戳timestamp

時間戳timestamp實際應(yīng)用場景介紹:

1、防止數(shù)據(jù)出現(xiàn)并發(fā)修改問題。

2、timestamp實現(xiàn)獲取增量(新增和修改)數(shù)據(jù)同步。

2.8、SQL Server中STUFF函數(shù)

2.9、SQL Server中g(shù)roup_concat合并數(shù)據(jù)為一行

一、理解索引的結(jié)構(gòu)

  索引在數(shù)據(jù)庫中的作用類似于目錄在書籍中的作用,用來提高查找信息的速度。使用索引查找數(shù)據(jù),無需對整表進行掃描,可以快速找到所需數(shù)據(jù)。微軟的SQL SERVER提供了兩種索引:聚集索引(clustered index,也稱聚類索引、簇集索引)和非聚集索引(nonclustered index,也稱非聚類索引、非簇集索引)。

  SQL Server 中數(shù)據(jù)存儲的基本單位是頁(Page)。數(shù)據(jù)庫中的數(shù)據(jù)文件(.mdf 或 .ndf)分配的磁盤空間可以從邏輯上劃分成頁(從 0 到 n 連續(xù)編號)。磁盤 I/O 操作在頁級執(zhí)行。也就是說,SQL Server 每次讀取或?qū)懭霐?shù)據(jù)的最少數(shù)據(jù)單位是數(shù)據(jù)頁。

  下面我們先簡單的了解一下索引的體系結(jié)構(gòu):

  1. 聚集索引結(jié)構(gòu)

  在 SQL Server 中,索引是按 B 樹結(jié)構(gòu)進行組織的。

  聚集索引單個分區(qū)中的結(jié)構(gòu):

--建立UserAddDate聚集索引 Create CLUSTERED INDEX [IX_AddDate] ON [User] ( [AddDate] ASC )   

  聚集索引(Clustered Index)特點

聚集索引的葉節(jié)點就是實際的數(shù)據(jù)頁

聚集索引中的排序順序僅僅表示數(shù)據(jù)頁鏈在邏輯上是有序的。而不是按照順序物理的存儲在磁盤上

行的物理位置和行在索引中的位置是相同的

每個表只能有一個聚集索引

聚集索引的平均大小大約為表大小的5%左右

  2. 非聚集索引結(jié)構(gòu)

  非聚集索引與聚集索引具有相同的 B 樹結(jié)構(gòu),它們之間的顯著差別在于以下兩點:

  1. 基礎(chǔ)表的數(shù)據(jù)行不按非聚集鍵的順序排序和存儲。

  2. 非聚集索引的葉層是由索引頁而不是由數(shù)據(jù)頁組成。

  下圖示意了單個分區(qū)中的非聚集索引結(jié)構(gòu):

  包含列的索引

  通過將包含列(稱為非鍵列)添加到索引的葉級,可以擴展非聚集索引的功能。鍵列存儲在非聚集索引的所有級別,而非鍵列僅存儲在葉級別。

  下面舉個簡單的例子來說明一下聚集索引和非聚集索引的區(qū)別:

  我們有一本漢語字典,可以把它的正文本身看做是一個聚集索引,它是按照漢字拼音的開頭字母排序的,不再需要查找其他目錄。當遇到不認識的字時,需要結(jié)合“部首目錄”和“檢字表”, 先找到目錄中的結(jié)果,然后再翻到您所需要的頁碼。通過這種方法查到的目錄中字的排序并不是真正的正文的排序方法。把這種看做是一個非聚集索引。

  另外,請注意每個表只能有一個聚集索引。

--建立UserAddDate非聚集索引 Create NONCLUSTERED INDEX [IX_AddDate] ON [User] ( [AddDate] ASC )   

  非聚集索引 (Unclustered Index) 特點

非聚集索引的頁,不是數(shù)據(jù),而是指向數(shù)據(jù)頁的頁。

若未指定索引類型,則默認為非聚集索引。

葉節(jié)點頁的次序和表的物理存儲次序不同

每個表最多可以有249個非聚集索引

在非聚集索引創(chuàng)建之前創(chuàng)建聚集索引(否則會引發(fā)索引重建)

  二、選擇建立哪種索引

  1. 何時創(chuàng)建聚集索引更能提高性能

  Clustered Index會提高大多數(shù)table的性能,尤其是當它滿足以下條件時:

  獨特, 狹窄, 持續(xù)增長的,最好是只向上增加。例如:

Identity

Date, identity

GUID (only when using newsequentialid() function)  

  2. 非聚集索引提高性能的方法

  非聚集索引由于B樹的節(jié)點不是具體數(shù)據(jù)頁,有時候由于這個原因,會導(dǎo)致非聚集索引甚至不如表遍歷來的快。但是,非聚集索引有個特性,如果你要查詢的內(nèi)容,在非聚集索引中以及被覆蓋到了,則不需要繼續(xù)到聚集索引,或者RID(heap結(jié)構(gòu)中的行標識符)中去尋找數(shù)據(jù)了,這時候就可以很大的提高性能,這就是覆蓋面(Covering) 的問題。

  由于聚集索引葉子節(jié)點就是具體數(shù)據(jù),所以聚集索引的覆蓋率是100%, 通過提高覆蓋面來提高性能的問題也就只有非聚集索引(Nonclustered Indexes)才存在。

  當查詢中所有的columns都包括在index上時,我們說這 index covers the query. Columns的順序在此不重要(Select 時候的順序不重要,但是Index 建立的順序可得小心了)。

  在 SQL Server 2005 中,為了提高這種 Covering 帶來的好處,甚至可以通過將非鍵列添加到非聚集索引的葉級別來擴展非聚集索引的功能。

  補充:只有查詢在具有高度選擇性的情況下,非聚集索引才有優(yōu)勢。

  三、使用聚集索引或非聚集索引的場景 (注:優(yōu)先級依次為推薦,應(yīng),不應(yīng))

  四、主鍵和聚集索引的比較

  以下是一些大眾點評網(wǎng)中測試使用的示例:

CHECKPOINT 

DBCC DropCLEANBUFFERS 

SET STATISTICS IO ON 

declare @d datetime 

set @d=getdate() 

Select * FROM User Where AddDate>'2008-06-01' AND AddDate<'2008-06-10' 

select [語句執(zhí)行花費時間(毫秒)]=datediff(ms,@d,getdate()) 

--(45077 行受影響) 

--表'User'。掃描計數(shù)1,邏輯讀取1103 次,物理讀取2 次,預(yù)讀1090 次,lob 邏輯讀取0 次,

lob 物理讀取0 次,lob 預(yù)讀0 次。 

--2543 

CHECKPOINT 

DBCC DropCLEANBUFFERS 

SET STATISTICS IO ON 

declare @d datetime 

set @d=getdate() 

Select * FROM User WITH (INDEX=IX_AddDate) Where AddDate>'2008-06-01' AND AddDate<'2008-06-10' 

select [語句執(zhí)行花費時間(毫秒)]=datediff(ms,@d,getdate()) 

--(45077 行受影響) 

--表'User'。掃描計數(shù)1,邏輯讀取45165 次,物理讀取133 次,預(yù)讀141 次,lob 邏輯讀取0 次,

lob 物理讀取0 次,lob 預(yù)讀0 次。 

--3860 

  五、使用索引的代價

索引需要占用數(shù)據(jù)表以外的物理存儲空間

創(chuàng)建索引和維護索引要花費一定的時間

當對表進行更新操作時,索引需要被重建,這樣降低了數(shù)據(jù)的維護速度。

課程聯(lián)系1:
大學資源網(wǎng)客服

課程聯(lián)系2:
大學資源網(wǎng)客服

課程聯(lián)系3:
大學資源網(wǎng)客服

服務(wù)時間:
8:00-21:00(工作日)

扎鲁特旗| 合肥市| 荣成市| 十堰市| 轮台县| 子长县| 昌黎县| 巴彦淖尔市| 灵武市| 巍山| 石嘴山市| 奉化市| 萍乡市| 郓城县| 乐安县| 太和县| 瓦房店市| 遂昌县| 马公市| 泽库县| 礼泉县| 平塘县| 吉首市| 唐河县| 神农架林区| 景东| 兴业县| 淳化县| 玉山县| 汉阴县| 岑溪市| 政和县| 黎城县| 宜兰县| 韩城市| 石城县| 循化| 望奎县| 务川| 化州市| 西宁市|