mysql 索引的理解

2021-10-10 10:59:45 字數 865 閱讀 6550

1.資料存放的順序和索引順序一致,可以把相關資料儲存在一起。例如實現電子郵箱時,可以根據使用者 id 來聚集資料,這樣只需要從磁碟讀取少數的資料頁就能獲取某個使用者的全部郵件。如果沒有使用聚簇索引,則每封郵件都可能導致一次磁碟 i/o。

2.資料訪問更快,聚簇索引將索引和資料儲存在同乙個b-tree中,因此從舉措索引中獲取資料通常比非聚簇索引查詢更快。

3.使用覆蓋索引掃瞄的查詢可以直接使用頁節點中的主鍵值(二級索引(非聚簇索引) 的葉子節點儲存的不是指向行的物理位置的指標,而是行的主鍵值)。

(ps:覆蓋索引:mysql 可以使用索引來直接獲取列的資料,這樣就不需要查到索引後,然後通過葉子節點的指標回表讀取資料行,如果索引的葉子節點中已經包含了或者說覆蓋 所有需要查詢的字段的值,那麼就沒有必要再回表查詢了,這種稱之為「覆蓋索引」)

1.聚簇資料提高了io效能,如果資料全部放在記憶體中,則訪問的順序就沒那麼重要了

2. 插入速度嚴重依賴插入順序。按主鍵的順序插入是速度最快的。但如果不是按照主鍵順序載入資料,則需在載入完成後最好使用optimize table重新組織一下表

3.更新聚簇索引列的代價很高。因為會強制innod將每個被更新的行移動到新的位置

4.基於聚簇索引的表在插入新行,或主鍵被更新導致需要移動行的時候,可能面臨頁**的問題。頁**會導致表占用更多的磁碟空間。

5.聚簇索引可能導致全表掃瞄變慢,尤其是行比較稀疏,或由於頁**導致資料儲存不連續的時

6.非聚集索引比想象的更大,因為二級索引的葉子節點包含了引用行的主鍵列

7.非聚集索引訪問需要兩次索引查詢(非聚集索引中葉子節點儲存的行指標指向的是行的主鍵值),對於innodb自適應雜湊索引可以減少這樣的重複工作

引用:**:索引)

select加鎖分析(mysql):

mysql 索引的理解

1,索引 在資料庫裡也可以叫作 鍵 主鍵,唯一,普通索引。儲存引擎可以通過索引來快速查到記錄的一種資料結構,當表中的資料量越來越大的時候,索引的作用越發的重要 2,考慮到磁碟io是非常高昂的操作,計算機作業系統做了一些優化,當一次io時,不光把當前磁碟位址的資料,而是把相鄰的資料也都讀取到記憶體緩衝...

MySQL理解索引 新增索引的原則

mysql理解索引 新增索引的原則 索引用於快速找出在某個列中有一特定值的行。不使用索引,mysql必須從第1條記錄開始然後讀完整個表直到找出相關的行,還需要考慮每次讀入資料頁的io開銷。而如果採取索引,則可以根據索引指向的頁以及記錄在頁中的位置,迅速地讀取目標頁進而獲取目標記錄。大多數情況下都 預...

mysql索引理解

說到mysql,很多面試官會問mysql的底層儲存結構,mysql的儲存引擎,什麼是聚簇索引之類的問題 我這邊就好好寫寫這些是什麼。首先mysql底層結構是啥,b tree。很多人都會說這個,然後呢這個是怎麼實現的,開始懵逼的,只能記得一些模稜兩可的答案,我這邊其實也差不多,基本屬於模模糊糊,看一遍...