日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

SQL Server 索引基礎(chǔ)知識(shí)(4)----主鍵與聚集索引_Mssql數(shù)據(jù)庫(kù)教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:SQL Server 2000 中使用正則表達(dá)式
這兩天有個(gè)需求,需要在數(shù)據(jù)庫(kù)中判斷字符串的格式,于是從網(wǎng)上搜集了一些資料,整理了一下。 下面這個(gè)是一個(gè)自定義函數(shù),用戶可以調(diào)用這個(gè)函數(shù)判斷指定的字符串是否符合正則表達(dá)式的規(guī)則. CREATE FUNCTION dbo.find_regular_expression ( @source varchar(50

有些人可能對(duì)主鍵和聚集索引有所混淆,其實(shí)這兩個(gè)是不同的概念,下面是一個(gè)簡(jiǎn)單的描述。不想看繞口文字者,直接看兩者的對(duì)比表。尤其是最后一項(xiàng)的比較。

主鍵(PRIMARY KEY )

來自MSDN的描述:

表通常具有包含唯一標(biāo)識(shí)表中每一行的值的一列或一組列。這樣的一列或多列稱為表的主鍵 (PK),用于強(qiáng)制表的實(shí)體完整性。在創(chuàng)建或修改表時(shí),您可以通過定義 PRIMARY KEY 約束來創(chuàng)建主鍵。

一個(gè)表只能有一個(gè) PRIMARY KEY 約束,并且 PRIMARY KEY 約束中的列不能接受空值。由于 PRIMARY KEY 約束可保證數(shù)據(jù)的唯一性,因此經(jīng)常對(duì)標(biāo)識(shí)列定義這種約束。

如果為表指定了 PRIMARY KEY 約束,則 SQL Server 2005 數(shù)據(jù)庫(kù)引擎 將通過為主鍵列創(chuàng)建唯一索引來強(qiáng)制數(shù)據(jù)的唯一性。當(dāng)在查詢中使用主鍵時(shí),此索引還可用來對(duì)數(shù)據(jù)進(jìn)行快速訪問。因此,所選的主鍵必須遵守創(chuàng)建唯一索引的規(guī)則。

創(chuàng)建主鍵時(shí),數(shù)據(jù)庫(kù)引擎 會(huì)自動(dòng)創(chuàng)建唯一的索引來強(qiáng)制實(shí)施 PRIMARY KEY 約束的唯一性要求。如果表中不存在聚集索引或未顯式指定非聚集索引,則將創(chuàng)建唯一的聚集索引以強(qiáng)制實(shí)施 PRIMARY KEY 約束。

 

聚集索引

聚集索引基于數(shù)據(jù)行的鍵值在表內(nèi)排序和存儲(chǔ)這些數(shù)據(jù)行。每個(gè)表只能有一個(gè)聚集索引,因?yàn)閿?shù)據(jù)行本身只能按一個(gè)順序存儲(chǔ)。

每個(gè)表幾乎都對(duì)列定義聚集索引來實(shí)現(xiàn)下列功能:

  • 可用于經(jīng)常使用的查詢。
  • 提供高度唯一性。

兩者的比較

下面是一個(gè)簡(jiǎn)單的比較表

  主鍵 聚集索引
用途 強(qiáng)制表的實(shí)體完整性 對(duì)數(shù)據(jù)行的排序,方便查詢用
一個(gè)表多少個(gè) 一個(gè)表最多一個(gè)主鍵 一個(gè)表最多一個(gè)聚集索引
是否允許多個(gè)字段來定義 一個(gè)主鍵可以多個(gè)字段來定義 一個(gè)索引可以多個(gè)字段來定義
     
是否允許 null 數(shù)據(jù)行出現(xiàn) 如果要?jiǎng)?chuàng)建的數(shù)據(jù)列中數(shù)據(jù)存在null,無法建立主鍵。
創(chuàng)建表時(shí)指定的 PRIMARY KEY 約束列隱式轉(zhuǎn)換為 NOT NULL。
沒有限制建立聚集索引的列一定必須 not null .
也就是可以列的數(shù)據(jù)是 null
參看最后一項(xiàng)比較
是否要求數(shù)據(jù)必須唯一 要求數(shù)據(jù)必須唯一 數(shù)據(jù)即可以唯一,也可以不唯一�?茨愣x這個(gè)索引的 UNIQUE 設(shè)置。
(這一點(diǎn)需要看后面的一個(gè)比較,雖然你的數(shù)據(jù)列可能不唯一,但是系統(tǒng)會(huì)替你產(chǎn)生一個(gè)你看不到的唯一列)
     
創(chuàng)建的邏輯 數(shù)據(jù)庫(kù)在創(chuàng)建主鍵同時(shí),會(huì)自動(dòng)建立一個(gè)唯一索引。
如果這個(gè)表之前沒有聚集索引,同時(shí)建立主鍵時(shí)候沒有強(qiáng)制指定使用非聚集索引,則建立主鍵時(shí)候,同時(shí)建立一個(gè)唯一的聚集索引
如果未使用 UNIQUE 屬性創(chuàng)建聚集索引,數(shù)據(jù)庫(kù)引擎 將向表自動(dòng)添加一個(gè)四字節(jié) uniqueifier 列。
必要時(shí),數(shù)據(jù)庫(kù)引擎 將向行自動(dòng)添加一個(gè) uniqueifier 值,使每個(gè)鍵唯一。此列和列值供內(nèi)部使用,用戶不能查看或訪問。

參考: CSDN 大力

簇集索引=聚集索引:
聚集索引確定表中數(shù)據(jù)的物理順序。聚集索引類似于電話簿,后者按姓氏排列數(shù)據(jù)。由于聚集索引規(guī)定數(shù)據(jù)在表中的物理存儲(chǔ)順序,因此一個(gè)表只能包含一個(gè)聚集索引。但該索引可以包含多個(gè)列(組合索引),就像電話簿按姓氏和名字進(jìn)行組織一樣。

聚集索引對(duì)于那些經(jīng)常要搜索范圍值的列特別有效。使用聚集索引找到包含第一個(gè)值的行后,便可以確保包含后續(xù)索引值的行在物理相鄰。例如,如果應(yīng)用程序執(zhí)行的一個(gè)查詢經(jīng)常檢索某一日期范圍內(nèi)的記錄,則使用聚集索引可以迅速找到包含開始日期的行,然后檢索表中所有相鄰的行,直到到達(dá)結(jié)束日期。這樣有助于提高此類查詢的性能。同樣,如果對(duì)從表中檢索的數(shù)據(jù)進(jìn)行排序時(shí)經(jīng)常要用到某一列,則可以將該表在該列上聚集(物理排序),避免每次查詢?cè)摿袝r(shí)都進(jìn)行排序,從而節(jié)省成本。

非簇集索引:
非聚集索引與聚集索引一樣有 B 樹結(jié)構(gòu),但是有兩個(gè)重大差別:

數(shù)據(jù)行不按非聚集索引鍵的順序排序和存儲(chǔ)。


非聚集索引的葉層不包含數(shù)據(jù)頁(yè)。
相反,葉節(jié)點(diǎn)包含索引行。每個(gè)索引行包含非聚集鍵值以及一個(gè)或多個(gè)行定位器,這些行定位器指向有該鍵值的數(shù)據(jù)行(如果索引不唯一,則可能是多行)。

非聚集索引可以在有聚集索引的表、堆集或索引視圖上定義。在 Microsoft® SQL Server™ 2000 中,非聚集索引中的行定位器有兩種形式:

如果表是堆集(沒有聚集索引),行定位器就是指向行的指針。該指針用文件標(biāo)識(shí)符 (ID)、頁(yè)碼和頁(yè)上的行數(shù)生成。整個(gè)指針稱為行 ID。


如果表沒有聚集索引,或者索引在索引視圖上,則行定位器就是行的聚集索引鍵。如果聚集索引不是唯一的索引,SQL Server 2000 將添加在內(nèi)部生成的值以使重復(fù)的鍵唯一。用戶看不到這個(gè)值,它用于使非聚集索引內(nèi)的鍵唯一。SQL Server 通過使用聚集索引鍵搜索聚集索引來檢索數(shù)據(jù)行,而聚集索引鍵存儲(chǔ)在非聚集索引的葉行內(nèi)。
由于非聚集索引將聚集索引鍵作為其行指針存儲(chǔ),因此使聚集索引鍵盡可能小很重要。如果表還有非聚集索引,請(qǐng)不要選擇大的列作為聚集索引的鍵。


唯一索引:
唯一索引可以確保索引列不包含重復(fù)的值。在多列唯一索引的情況下,該索引可以確保索引列中每個(gè)值組合都是唯一的。
唯一索引既是索引也是約束。

復(fù)合索引:
索引項(xiàng)是多個(gè)的就叫組合索引,也叫復(fù)合索引。
復(fù)合索引使用時(shí)需要注意索引項(xiàng)的次序。

分享:數(shù)據(jù)庫(kù)的分離及附加
1、分離數(shù)據(jù)庫(kù) exec sp_detach_db dataname --eg: dataname:要分離的數(shù)據(jù)庫(kù)名 2、附加數(shù)據(jù)庫(kù) 1 exec sp_attach_single_file_db newdataname,mdfPath /*eg: newdataname:要附加上的新數(shù)據(jù)庫(kù)名稱(可以是原來的) mdfPath='C:\Program Files\Microsoft SQL Serve

來源:模板無憂//所屬分類:Mssql數(shù)據(jù)庫(kù)教程/更新時(shí)間:2012-06-08
相關(guān)Mssql數(shù)據(jù)庫(kù)教程