聚集索引和非聚集索引分別是什么意思,有什么區(qū)別
聚集索引和非聚集索引分別是什么意思,有什么區(qū)別
聚集索引和非聚集索引的根本區(qū)別: 1、表記錄的排列順序和與索引的排列順序是否一致。 2、聚集索引一個表只有一個,非聚集索引一個表可以存在多個。
3、聚集索引存儲記錄是物理上連續(xù)存在,非聚集索引是邏輯上的連續(xù)。
聚集索引優(yōu)點: 1、以最快的速度縮小查詢范圍。 2、以最快的速度進行字段排序。聚集索引使用場合: 1、此列包含有限數(shù)目的不同值。 2、查詢的結(jié)果返回一個區(qū)間的值。
3、查詢的結(jié)果返回某值相同的大量結(jié)果集。非聚集索引優(yōu)點: 1、非聚集索引比聚集索引層次多。 3、添加記錄不會引起數(shù)據(jù)順序的重組。
非聚集索引使用場合: 1、此列包含了大量數(shù)目不同的值。 2、查詢的結(jié)束返回的是少量的結(jié)果集。
聚集索引和非聚集索引的區(qū)別
聚簇索引是將索引和整條記錄存放在一起,找到索引就找到了記錄。非聚簇索引只存儲索引字段和記錄所在的位置,通過索引找到記錄所在的位置,然后再根據(jù)記錄所在位置去獲取記錄。
一般來講一堆數(shù)據(jù)記錄最多只能有一個聚簇索引,但可以有很多非聚簇索引。
兩者的優(yōu)缺點對比
聚簇索引的查找記錄要比非聚簇索引塊,因為聚簇索引查找到索引就查找到了數(shù)據(jù)位置,而非聚簇索引查找到索引之后,根據(jù)記錄的數(shù)據(jù)地址,再去查找數(shù)據(jù)。
一個數(shù)據(jù)表只能有一個聚簇索引,但可以有多個非聚簇索引。
聚簇索引和非聚簇索引都可以加快查詢速度,但同時也都對寫入速度會有影響;聚簇索引對寫入的速度影響更大一些。
兩者使用場景
InnoDB的主鍵使用的都是聚簇索引,而MyASM無論是主鍵索引還是二級索引,使用的都是非聚簇索引。百科
聚集索引插入數(shù)據(jù)時速度要慢(時間花費在“物理存儲的排序”上,也就是首先要找到位置然后插入),查詢數(shù)據(jù)比非聚集數(shù)據(jù)的速度快。
聚簇索引和非聚簇索引的區(qū)別是什么?
存儲特點的區(qū)別:
聚集索引。表數(shù)據(jù)按照索引的順序來存儲的,也就是說索引項的順序與表中記錄的物理順序一致。
對于聚集索引,葉子結(jié)點即存儲了真實的數(shù)據(jù)行,不再有另外單獨的數(shù)據(jù)頁。
在一張表上最多只能創(chuàng)建一個聚集索引,因為真實數(shù)據(jù)的物理順序只能有一種。
非聚集索引。表數(shù)據(jù)存儲順序與索引順序無關(guān)。對于非聚集索引,葉結(jié)點包含索引字段值及指向數(shù)據(jù)頁數(shù)據(jù)行的邏輯指針,其行數(shù)量與數(shù)據(jù)表行數(shù)據(jù)量一致。
總結(jié)一下:聚集索引是一種稀疏索引,數(shù)據(jù)頁上一級的索引頁存儲的是頁指針,而不是行指針。而對于非聚集索引,則是密集索引,在數(shù)據(jù)頁的上一級索引頁它為每一個數(shù)據(jù)行存儲一條索引記錄。
更新表數(shù)據(jù)
1、向表中插入新數(shù)據(jù)行
如果一張表沒有聚集索引,那么它被稱為 “堆集”(Heap)。
這樣的表中的數(shù)據(jù)行沒有特定的順序,所有的新行將被添加到表的末尾位置。
而建立了聚簇索引的數(shù)據(jù)表則不同:最簡單的情況下,插入操作根據(jù)索引找到對應(yīng)的數(shù)據(jù)頁,然后通過挪動已有的記錄為新數(shù)據(jù)騰出空間,**插入數(shù)據(jù)。如果數(shù)據(jù)頁已滿,則需要拆分?jǐn)?shù)據(jù)頁,調(diào)整索引指針(且如果表還有非聚集索引,還需要更新這些索引指向新的數(shù)據(jù)頁)。
而類似于自增列為聚集索引的,數(shù)據(jù)庫系統(tǒng)可能并不拆分?jǐn)?shù)據(jù)頁,而只是簡單的新添數(shù)據(jù)頁。
2、從表中刪除數(shù)據(jù)行
對刪除數(shù)據(jù)行來說:刪除行將導(dǎo)致其下方的數(shù)據(jù)行向上移動以填充刪除記錄造成的空白。如果刪除的行是該數(shù)據(jù)頁中的**一行,那么該數(shù)據(jù)頁將被回收,相應(yīng)的索引頁中的記錄將被刪除。
對于數(shù)據(jù)的刪除操作,可能導(dǎo)致索引頁中僅有一條記錄,這時,該記錄可能會被移至鄰近的索引頁中,原索引頁將被回收,即所謂的“索引合并”。
聚集索引和非聚集索引的區(qū)別?
1、一個表中只能擁有一個聚集索引,而非聚集索引一個表可以存幾個 2、聚集索引:索引中鍵值的邏輯順序決定了表中響應(yīng)的物理順序; 非聚集索引:索引中索引的邏輯順序與磁盤上運行的物理存儲順序不同 3、索引是通過二叉樹的數(shù)據(jù)結(jié)構(gòu)來描述的, 我們可以這樣理解聚集索引: 索引的 葉節(jié)點 就是 數(shù)據(jù)節(jié)點 。而非聚集索引的葉節(jié)點仍然是索引節(jié)點,只不過有一個指針指向?qū)?yīng)的數(shù)據(jù)塊。
4、聚集索引安裝物理存儲安裝 索引排序 ,非聚集索引物理存 不按照索引排序 。