MySQL中聚簇索引與非聚簇索引的區(qū)別是什么?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站制作、成都網(wǎng)站建設(shè)、資陽網(wǎng)絡(luò)推廣、微信平臺小程序開發(fā)、資陽網(wǎng)絡(luò)營銷、資陽企業(yè)策劃、資陽品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供資陽建站搭建服務(wù),24小時服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com
通常情況下,建立索引是加快查詢速度的有效手段。但索引不是萬能的,靠索引并不能實現(xiàn)對所有數(shù)據(jù)的快速存取。事實上,如果索引策略和數(shù)據(jù)檢索需求嚴(yán)重不符的話,建立索引反而會降低查詢性能。因此在實際使用當(dāng)中,應(yīng)該充分考慮到索引的開銷,包括磁盤空間的開銷及處理開銷(如資源競爭和加鎖)。例如,如果數(shù)據(jù)頻繁的更新或刪加,就不宜建立索引。
mysql聚簇索引和非聚簇索引的介紹:
聚簇索引:
表數(shù)據(jù)按順序存儲,即索引順序和表記錄物理存儲順序一致。
聚簇索引 葉子節(jié)點存儲數(shù)據(jù)行和B-Tree索引。
在一個表中只能有一個聚簇索引,因為真實物理存儲順序只能有一種。
聚簇索引是稀疏索引,數(shù)據(jù)頁上一級索引存儲是頁指針,非行指針。
非聚簇索引:
表數(shù)據(jù)存儲順序與索引順序無關(guān)。
對于非聚簇索引,葉節(jié)點包含行主鍵值和主鍵值作為指向行的“指針”,通過二級索引查找,兩次B-Tree查找 InnoDB自適應(yīng)哈希索引能夠減少這樣重復(fù)工作。
非聚簇索引是密集索引,在數(shù)據(jù)頁的上一級索引頁它為每一個數(shù)據(jù)行存儲一條記錄。
總結(jié)一下:聚集索引是一種稀疏索引,數(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)致索引頁中僅有一條記錄,這時,該記錄可能會被移至鄰近的索引頁中,原索引頁將被回收,即所謂的“索引合并”。
關(guān)于mysql中聚簇索引與非聚簇索引的區(qū)別是什么問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。