真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SqlServer的一些知識(shí)點(diǎn)定義總結(jié)

數(shù)據(jù)庫完整性:是指數(shù)據(jù)庫中數(shù)據(jù)在邏輯上的一致性、正確性、有效性和相容性

為徐州等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及徐州網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站制作、網(wǎng)站建設(shè)、徐州網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

實(shí)體完整性(Entity Integrity 行完整性):實(shí)體完整性指表中行的完整性。主要用于保證操作的數(shù)據(jù)(記錄)非空、唯一且不重復(fù)。即實(shí)體完整性要求每個(gè)關(guān)系(表)有且僅有一個(gè)主鍵,每一個(gè)主鍵值必須唯一,而且不允許為“空”(NULL)或重復(fù)。

域完整性(Domain Integrity 列完整性):是指數(shù)據(jù)庫表中的列必須滿足某種特定的數(shù)據(jù)類型或約束。其中約束又包括取值范圍、精度等規(guī)定。表中的CHECK、FOREIGN KEY 約束和DEFAULT、 NOT NULL定義都屬于域完整性的范疇。

參照完整性(Referential Integrity)屬于表間規(guī)則:對于永久關(guān)系的相關(guān)表,在更新、插入或刪除記錄時(shí),如果只改其一,就會(huì)影響數(shù)據(jù)的完整性。如刪除父表的某記錄后,子表的相應(yīng)記錄未刪除,致使這些記錄稱為孤立記錄。

參照完整性規(guī)則(Referential Integrity)要求:若屬性組F是關(guān)系模式R1的主鍵,同時(shí)F也是關(guān)系模式R2的外鍵,則在R2的關(guān)系中,F的取值只允許兩種可能:空值或等于R1關(guān)系中某個(gè)主鍵值。

Sql Server的存儲(chǔ)結(jié)構(gòu),頁、區(qū)、堆

頁:用于數(shù)據(jù)存儲(chǔ)的連續(xù)的磁盤空間塊,SQL Server中數(shù)據(jù)存儲(chǔ)的基本單位是頁,磁盤I/O操作在頁級執(zhí)行,頁的大小為8KB。每頁的開頭是96字節(jié)的頁頭,用于存儲(chǔ)有關(guān)頁的系統(tǒng)信息,包括頁碼、頁類型、頁的可用空間以及擁有該頁的對象的分配單元ID;其他便是存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)行與剩下可用空間,結(jié)構(gòu)圖如下(個(gè)人繪制)

Sql Server的一些知識(shí)點(diǎn)定義總結(jié)

    區(qū)間:區(qū)是管理空間的基本單位,一個(gè)區(qū)是8個(gè)物理上連續(xù)的頁(即64KB)的集合,所有頁都存儲(chǔ)在區(qū)中。SQL Server有兩種類型的區(qū):統(tǒng)一區(qū)和混合區(qū)。

        堆:堆是指不含聚集索引的表,它的數(shù)據(jù)不按任何順序進(jìn)行存儲(chǔ)。

        聯(lián)系一個(gè)堆中的數(shù)據(jù)的唯一結(jié)構(gòu)是被稱為索引分配映射(IAM)的一個(gè)位圖頁,當(dāng)掃描對象時(shí),SQl server使用IAM頁來遍歷該對象的數(shù)據(jù)。

堆表內(nèi)的數(shù)據(jù)頁和行沒有任何特定的順序,也不鏈接在一起。數(shù)據(jù)頁之間唯一的邏輯連接是記錄在IAM頁內(nèi)的信息

假設(shè)某訂單明細(xì)表中有100萬條數(shù)據(jù),需要查詢某個(gè)訂單的明細(xì)數(shù)據(jù),如下:

select*fromT_EPZ_INOUT_ENTRY_DETAILwhereentry_apply_id='31227000034000090169'

如果在堆表中進(jìn)行查詢,SQLServer通過掃描IAM頁對堆表進(jìn)行全表掃描,對entry_apply_id比較100萬次,如果以entry_apply_id字段建立索引,則因?yàn)樗饕I值數(shù)據(jù)都必定以B-Tree有順序的擺放,所以可采用二分查找找數(shù)據(jù)。也就是2的N次方大于記錄數(shù),就可以找到該條數(shù)據(jù)。而2的20次方大于100萬,因此最多找尋20次就可以找到該條記錄。20次與100萬次的比較,你可以輕松感受出性能的差異。

由此引出索引的概念

索引分為聚集索引與非聚集索引

聚集索引 :聚集索引是指數(shù)據(jù)庫表行中數(shù)據(jù)的物理順序與鍵值的邏輯(索引)順序相同。一個(gè)表只能有一個(gè)聚集索引,因?yàn)橐粋€(gè)表的物理順序只有一種情況,所以,對應(yīng)的聚集索引只能有一個(gè)。如果某索引不是聚集索引,則表中的行物理順序與索引順序不匹配,與非聚集索引相比,聚集索引有著更快的檢索速度

非聚集索引:非聚集索引是一種索引,該索引中索引的邏輯順序與磁盤上行的物理存儲(chǔ)順序不同

聚集索引與非聚集索引的形象比喻

漢語字典的正文本身就是一個(gè)聚集索引。 比如,我們要查“安”字,就會(huì)很自然地翻開字典的前幾頁,因?yàn)椤鞍病钡钠匆羰恰癮n”,而按照拼音排序漢字的字典是以英文字母“a”開頭并以“z”結(jié)尾的,那么“安”字就自然地排在字典的前部。如果您翻完了所有以“a”開頭的部分仍然找不到這個(gè)字,那么就說明您的字典中沒有這個(gè)字;同樣的,如果查“張”字,那您也會(huì)將您的字典翻到最后部分,因?yàn)椤皬垺钡钠匆羰恰皕hang”。也就是說,字典的正文部分本身就是一個(gè)目錄,您不需要再去查其他目錄來找到您需要找的內(nèi)容。正文內(nèi)容本身就是一種按照一定規(guī)則排列的目錄稱為“聚集索引”。每個(gè)表只能有一個(gè)聚集索引,因?yàn)槟夸浿荒馨凑找环N方法進(jìn)行排序

如果您認(rèn)識(shí)某個(gè)字,您可以快速地從自動(dòng)中查到這個(gè)字。但您也可能會(huì)遇到您不認(rèn)識(shí)的字,不知道它的發(fā)音,這時(shí)候,您就不能按照剛才的方法找到您要查的字,而需要去根據(jù)“偏旁部首”查到您要找的字,然后根據(jù)這個(gè)字后的頁碼直接翻到某頁來找到您要找的字。但您結(jié)合“部首目錄”和“檢字表”而查到的字的排序并不是真正的正文的排序方法,比如您查“張”字,我們可以看到在查部首之后的檢字表中“張”的頁碼是672頁,檢字表中“張”的上面是“馳”字,但頁碼卻是63頁,“張”的下面是“弩”字,頁面是390頁。很顯然,這些字并不是真正的分別位于“張”字的上下方,現(xiàn)在您看到的連續(xù)的“馳、張、弩”三字實(shí)際上就是他們在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。我們可以通過這種方式來找到您所需要的字,但它需要兩個(gè)過程,先找到目錄中的結(jié)果,然后再翻到您所需要的頁碼。我們把這種目錄純粹是目錄,正文純粹是正文的排序方式稱為“非聚集索引”。 

Sql Server的一些知識(shí)點(diǎn)定義總結(jié)

如圖,表中存放的數(shù)據(jù)是雜亂無章的,沒有按照姓名進(jìn)行排序。我們將數(shù)據(jù)的姓名提取出來按照姓名創(chuàng)建一個(gè)非聚集索引。索引中姓名是排好序的,且索引所占用的空間遠(yuǎn)遠(yuǎn)小于表中數(shù)據(jù)所占用的空間,當(dāng)我們查詢表中某條數(shù)據(jù)時(shí)候,將不再進(jìn)行全表掃描,而對索引進(jìn)行掃描,得到想要的數(shù)據(jù)再定位到表中具體的數(shù)據(jù)?! 〉?在非聚集索引上,要掃描某個(gè)具體的姓名也得耗費(fèi)一定的時(shí)間,進(jìn)一步優(yōu)化,在其上面在加一個(gè)Non-leaf level (非葉節(jié)點(diǎn))可以B樹算法快速的定位。極大的提高了查詢速度

Sql Server的一些知識(shí)點(diǎn)定義總結(jié)

聚集索引的查詢就是按B樹查詢

     如何查詢表中的索引?  

Sql Server的一些知識(shí)點(diǎn)定義總結(jié)

 inidex_id = 0 說明表中無索引 inidex_id = 1 表中為聚集索引, inidex_id = 2或者3.。。。。為非聚集索引?! ?/p>

運(yùn)用索引遇到的問題以及技術(shù)

頁分裂、填充因子、碎片整理、索引統(tǒng)計(jì)

頁分裂:因?yàn)樵诜蔷奂饕谢蛘哂行虻臄?shù)據(jù)中 如 在a b e f中要插入新的數(shù)據(jù) c ,那么c在物理順序中將放入f的后面,成為 a b e f c這樣變造成了頁分裂。   

可以用索引整理、或者在建表時(shí)定義填充因子(就是頁創(chuàng)建之初,讓每個(gè)頁存儲(chǔ)的數(shù)據(jù)占頁的比列)解決頁分裂的情況

dbcc showcontig(Tstudent,non_sname) --Tstudent表明,PK_TStudent索引名 ,查詢頁分裂情況
 
 dbcc indexdefrag(schoolDB,Tstudent,non_sname)--索引整理
 
 create nonclustered index non_sname on TStudent(sname) with drop_existing,fillfactor = 50--重建索引,并且制定填充因子
 
 dbcc show_statistics(tstudent,non_sname)--查看索引統(tǒng)計(jì)
 
 update statistics schooldb.dbo.tstudent --人工更新表中所有索引的統(tǒng)計(jì)
 
 update statistics schooldb.dbo.tstudent non_sname --人工更新表中non_sname索引統(tǒng)計(jì)

在實(shí)際情況中,有時(shí)候不同索引會(huì)比用索引的速度更快,在運(yùn)用索引查詢的時(shí)候,但是sql server工具會(huì)自動(dòng)幫你判斷

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對創(chuàng)新互聯(lián)的支持。


文章名稱:SqlServer的一些知識(shí)點(diǎn)定義總結(jié)
轉(zhuǎn)載來源:http://weahome.cn/article/jppdsh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部