資料庫索引

2021-06-28 20:14:10 字數 2526 閱讀 6068

首先這裡對聚集索引和非聚集索引進行一下區別:

漢語字典的正文本身就是乙個聚集索引。比如,我們要查「安」字,就會很自然地翻開字典的前幾頁,因為「安」的拼音是「an」,而按照拼音排序漢字的字典是以英文本母「a」開頭並以「z」結尾的,那麼「安」字就自然地排在字典的前部。如果您翻完了所有以「a」開頭的部分仍然找不到這個字,那麼就說明您的字典中沒有這個字;同樣的,如果查「張」字,那您也會將您的字典翻到最後部分,因為「張」的拼音是「zhang」。也就是說,字典的正文部分本身就是乙個目錄,您不需要再去查其他目錄來找到您需要找的內容。正文內容本身就是一種按照一定規則排列的目錄稱為「聚集索引」。

如果您認識某個字,您可以快速地從自動中查到這個字。但您也可能會遇到您不認識的字,不知道它的發音,這時候,您就不能按照剛才的方法找到您要查的字,而需要去根據「偏旁部首」查到您要找的字,然後根據這個字後的頁碼直接翻到某頁來找到您要找的字。但您結合「部首目錄」和「檢字表」而查到的字的排序並不是真正的正文的排序方法,比如您查「張」字,我們可以看到在查部首之後的檢字表中「張」的頁碼是672頁,檢字表中「張」的上面是「馳」字,但頁碼卻是63頁,「張」的下面是「弩」字,頁面是390頁。很顯然,這些字並不是真正的分別位於「張」字的上下方,現在您看到的連續的「馳、張、弩」三字實際上就是他們在非聚集索引中的排序,是字典正文中的字在非聚集索引中的對映。我們可以通過這種方式來找到您所需要的字,但它需要兩個過程,先找到目錄中的結果,然後再翻到您所需要的頁碼。

我們把這種目錄純粹是目錄,正文純粹是正文的排序方式稱為「非聚集索引」。

通過以上例子,我們可以理解到什麼是「聚集索引」和「非聚集索引」。

也就是說他們的根本區別是:表記錄的排列順序和與索引的排列順序是否一致;

聚集索引表記錄的排列順序與索引的排列順序一致,優點是查詢速度快,因為一旦具有第乙個索引值的紀錄被找到,具有連續索引值的記錄也一定物理的緊跟其後。聚集索引的缺點是對錶進行修改速度較慢,這是為了保持表中的記錄的物理順序與索引的順序一致,而把記錄插入到資料頁的相應位置,必須在資料頁中進行資料重排,降低了執行速度。建議使用聚集索引的場合為:

a.此列包含有限數目的不同值; 

b.查詢的結果返回乙個區間的值;

c.查詢的結果返回某值相同的大量結果集。

非聚集索引指定了表中記錄的邏輯順序,但記錄的物理順序和索引的順序不一致,聚集索引和非聚集索引都採用了b+樹的結構,但非聚集索引的葉子層並不與實際的資料頁相重疊,而採用葉子層包含乙個指向表中的記錄在資料頁中的指標的方式。非聚集索引比聚集索引層次多,新增記錄不會引起資料順序的重組。建議使用非聚集索引的場合為:

a.此列包含了大量數目不同的值;

b.查詢的結束返回的是少量的結果集;

c.order by 子句中使用了該列。

另外這裡再對索引的類別分個類:
(1)聚集索引:表中儲存的資料按照索引的順序儲存,檢索效率比普通索引高,但對資料新增/修改/刪除的影響比較大

特點:  (1) 乙個表可以最多可以建立249個索引

(2) 先建聚集索引才能建立非聚集索引

(3) 非聚集索引資料與索引不同序

(4) 資料與索引在不同位置

(5) 索引在葉節點上儲存,在葉節點上有乙個"指標"直接指向要查詢的資料區域

(6) 資料不會根據索引鍵的順序重新排列資料

建立聚集索引的語法:

create nonclustered index idximpid on emp(empid)

(2)非聚集索引:不影響表中的資料儲存順序,檢索效率比聚集索引低,對資料新增/修改/刪除的影響很少

特點:  (1) 無索引,資料無序

(2) 有索引,資料與索引同序

(3) 資料會根據索引鍵的順序重新排列資料

(4) 乙個表只能有乙個索引

(5) 葉節點的指標指向的資料也在同一位置儲存

語法:create clustered index idxempid on emp(empid)

(3)惟一索引:惟一索引可以確保索引列不包含重複的值.

可以用多個列,但是索引可以確保索引列中每個值組合都是唯一的

姓  名

李  二

張  三

王  五

語法:

create unique index idxempid on

emp(姓,名)

(4)復合索引:如果在兩上以上的列上建立乙個索引,則稱為復合索引。

那麼,不可能有兩行的姓和名是重複的

語法:create

index indxfullname on

addressbook(firstname,lastname)

(5)系統自建的索引:在使用t_sql語句建立表的時候使用primary

key或unique約束時,會在表上自動建立乙個惟一索引

自動建立的索引是無法刪除的

語法:create table abc

( empid int primary key,

firstname varchar(50)unique,

lastname  varchar(50)unique,

)這樣的結果就出來了三個索引,但只有乙個聚集索引哦

資料庫 資料庫索引

索引是儲存引擎用於快速找到記錄的一種資料結構。索引以檔案的形式儲存在磁碟中。索引可以包含乙個或多個列的值。儲存引擎查詢資料的時候,先在索引中找對應值,然後根據匹配的索引記錄找到對應的資料行。1.b tree索引 2.雜湊索引 myisam和innodb儲存引擎 只支援btree索引,也就是說預設使用...

資料庫mysql索引 資料庫 mysql索引

mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...

資料庫索引

索引 索引列唯一索引 主鍵索引 聚簇索引和非聚簇索引 如何建立索引 如何刪除索引 使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓 lname 列。如果要按姓查詢特定職員,與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資...