課程目錄

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

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

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

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

本次分享課程適合人群和學(xué)習(xí)方式:

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

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

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

二、課程包含知識(shí)點(diǎn)如下

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

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

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

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

4、SQL Server表變量和表類型

5、SQL Server XML類型變量

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

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

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

2.2、SQL Server臨時(shí)表

2.3、SQL Server中Merge子句

2.4、SQL Server中OUTPUT子句

2.5、SQL Server中CTE表達(dá)式

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

2.7、SQL Server時(shí)間戳timestamp

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

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

2、timestamp實(shí)現(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ù)庫(kù)中的作用類似于目錄在書籍中的作用,用來(lái)提高查找信息的速度。使用索引查找數(shù)據(jù),無(wú)需對(duì)整表進(jìn)行掃描,可以快速找到所需數(shù)據(jù)。微軟的SQL SERVER提供了兩種索引:聚集索引(clustered index,也稱聚類索引、簇集索引)和非聚集索引(nonclustered index,也稱非聚類索引、非簇集索引)。

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

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

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

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

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

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

  聚集索引(Clustered Index)特點(diǎn)

聚集索引的葉節(jié)點(diǎn)就是實(shí)際的數(shù)據(jù)頁(yè)

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

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

每個(gè)表只能有一個(gè)聚集索引

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

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

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

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

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

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

  包含列的索引

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

  下面舉個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明一下聚集索引和非聚集索引的區(qū)別:

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

  另外,請(qǐng)注意每個(gè)表只能有一個(gè)聚集索引。

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

  非聚集索引 (Unclustered Index) 特點(diǎn)

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

若未指定索引類型,則默認(rèn)為非聚集索引。

葉節(jié)點(diǎn)頁(yè)的次序和表的物理存儲(chǔ)次序不同

每個(gè)表最多可以有249個(gè)非聚集索引

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

  二、選擇建立哪種索引

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

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

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

Identity

Date, identity

GUID (only when using newsequentialid() function)  

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

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

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

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

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

  補(bǔ)充:只有查詢?cè)诰哂懈叨冗x擇性的情況下,非聚集索引才有優(yōu)勢(shì)。

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

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

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

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 [語(yǔ)句執(zhí)行花費(fèi)時(shí)間(毫秒)]=datediff(ms,@d,getdate()) 

--(45077 行受影響) 

--表'User'。掃描計(jì)數(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 [語(yǔ)句執(zhí)行花費(fèi)時(shí)間(毫秒)]=datediff(ms,@d,getdate()) 

--(45077 行受影響) 

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

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

--3860 

  五、使用索引的代價(jià)

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

創(chuàng)建索引和維護(hù)索引要花費(fèi)一定的時(shí)間

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

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

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

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

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

贞丰县| 会昌县| 开原市| 曲阜市| 屏南县| 盐池县| 安康市| 德化县| 惠州市| 永善县| 肥乡县| 沧州市| 汉沽区| 体育| 三河市| 新田县| 辰溪县| 淮北市| 谢通门县| 灵山县| 德格县| 贵阳市| 武山县| 南郑县| 石景山区| 莲花县| 温泉县| 深泽县| 淳化县| 若尔盖县| 松阳县| 牙克石市| 元氏县| 滨州市| 台中县| 南陵县| 石渠县| 阿荣旗| 临沂市| 额济纳旗| 梓潼县|