q1:什麼是索引?
q2:什麼是聚簇索引?
q3:聚簇索引功能作用?
q4:聚簇索引優缺點?
q5:非聚簇索引思考同上三個問題?
a1:索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。通俗來說就像是給資料建立乙個詞典的查詢目錄一樣,可以通過很少的資訊標識具體資訊所在的位置。
a2:聚簇索引是順序結構與資料儲存物理結構一致的一種索引,並且乙個表的聚簇索引只能有唯一的一條。當表有聚簇索引時,它的資料行實際上存放在索引的葉子頁中。因為無法同時把資料行存放在兩個不同的對方,所以乙個表只能有乙個聚簇索引。就好比如果你要去圖書館借一本書,最開始是去電腦裡面查書名然後根據書名來定位藏書在那個區,哪個書櫃,哪一行,第多少本。。。清晰明確,一目了然,因為藏書的結構與圖書室的位置,書架的順序,書本的擺放順序與書籍的編號都是從大到小一致的順序擺放的,所以很容易找到。
a3:回答這個問題前思考下,為什麼建立索引?目的是什麼?看了上面的描述就知道了,肯定是為了加快找到目標資料的速度,節約查詢話費的時間啦,用資料庫術語來描述就是 :
建立索引的目的是加快對錶中記錄的查詢或排序。
但是話又說回來了,有了索引是不是就以為的資料的查詢快得不要不要的,。。。。
或者說,新增了索引之後,查詢速度一定迴避沒有新增索引的情況下更快? 我看未必哦。。。
我們還是先了解一下 家裡索引需要付出的代價和帶來的弊端吧:
一.增加了資料庫的儲存空間,
二.在插入和修改資料時要花費較多的時間(因為索引也要隨之變動);
a4:聚簇索引也是索引因此也具有索引的以上特點,優缺點總結:
優點:聚簇索引將索引和資料行儲存在同乙個b-tree中,查詢通過聚簇索引可以直接獲取資料,相比非聚簇索引需要第二次查詢(非覆蓋索引的情況下)效率要高。
聚簇索引對於範圍查詢的效率很高,因為其資料是按照大小排列的。
缺點:聚簇索引的更新代價比較高,如果更新了行的聚簇索引列,就需要將資料移動到相應的位置。這可能因為要插入的頁已滿而導致「頁**」。
插入速度嚴重依賴於插入順序,按照主鍵進行插入的速度是載入資料到innodb中的最快方式。如果不是按照主鍵插入,最好在載入完成後使用optimize table
命令重新組織一下表。
聚簇索引在插入新行和更新主鍵時,可能導致「頁**」問題。
聚簇索引可能導致全表掃瞄速度變慢,因為可能需要載入物理上相隔較遠的頁到記憶體中(需要耗時的磁碟尋道操作)。
a5:非聚簇索引記錄的物理順序與邏輯順序沒有必然的聯絡,與資料的儲存物理結構沒有關係;乙個表對應的非聚簇索引可以有多條,根據不同列的約束可以建立不同要求的非聚簇索引。同樣如果你去的不是圖書館,而是某城市的商業性質的圖書城,那麼你想找的書就擺放比較隨意了,由於商業圖書城空間比較緊正,藏書通常按照藏書上架的先後順序來擺放的,所以如果查詢到某書籍放在c區2櫃3排5倉,但你可能要繞過f區,而不是a.b.c.d...連貫一致的,也可能同在c區的2櫃,書櫃上第一排是計算機類的書記,也可能最後一排就是醫學類書籍;
a6:非聚簇索引功能,非聚簇索引又叫二級索引。二級索引的葉子節點中儲存的不是指向行的物理指標,而是行的主鍵值。當通過二級索引查詢行,儲存引擎需要在二級索引中找到相應的葉子節點,獲得行的主鍵值,然後使用主鍵去聚簇索引中查詢資料行,這需要兩次b-tree查詢。
a7:非聚簇索引優缺點:
優點:非聚簇索引使用主鍵作為」指標」 而不是使用位址值作為指標的好處是,減少了當出現行移動或者資料頁**時輔助索引的維護工作,使用主鍵值當作指標會讓輔助索引占用更多的空間,換來的好處是innodb在移動行時無須更新輔助索引中的這個」指標」。也就是說行的位置(實現中通過16k的page來定位,後面會涉及)會隨著資料庫裡資料的修改而發生變化(前面的b+樹節點**以及page的**),使用聚簇索引就可以保證不管這個主鍵b+樹的節點如何變化,輔助索引樹都不受影響。
缺點:非聚簇索引需要第二次查詢(非覆蓋索引的情況下)效率要低。
總結區別:
1、聚簇索引的葉子節點就是資料節點,而非聚簇索引的葉子節點仍然是索引節點,只不過有指向對應資料塊的指標。
2、聚簇索引的更新代價比較高,有可能導致分頁問題
3、非聚簇索引使用主鍵作為」指標」 而不是使用位址值作為指標的好處是,減少了當出現行移動或者資料頁**時輔助索引的維護工作
文中如有錯誤之處,請指出共同勉勵共進。
聚簇索引和非聚簇索引
一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾 乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以...
聚簇索引和非聚簇索引
一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以存...
聚簇索引和非聚簇索引
一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾 乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以...