1.索引是什麼?
索引是一種資料結構;
索引是一種排好序的資料結構
2.索引的目的是什麼?
幫助使用者高效快速查詢到業務所需的資料
綜上所訴,因此在大資料量的乙個表中,什麼樣的一種排好序的資料結構能夠達到我們的目的
1.特點
a-所有的葉子節點具有相同的深度,葉子節點的指標為空
b-所有的索引元素不重複
c-節點中資料是按照從左到右遞增排列
1. 特點:
a-非葉子節點,不儲存資料,只儲存索引(冗餘),可以儲存更多的索引
b-葉子節點包含所有的索引項,主鍵索引data會包含所有資料,非主鍵索引,data只會包含主鍵
c-葉子節點使用指標連線,提高區間訪問效能
b+tree葉子節點為什麼新增雙向指標連線各個葉子節點,因為查詢資料的時候,需要查詢根據某個範圍查詢資料,
比如,大於某個值,小於某個值,在m和n之間的資料等。
索引是如何支援千萬級的快速查詢的?
首先索引的結構是b+tree的結構,又因為mysql每個節點的大小是16kb,非葉子節點儲存的只是索引資料,
索引欄位是自增的整形型別的資料,佔據的空間大小為約8b,指向下一層節點的指標佔據的空間大小約6b,因此乙個
根節點儲存的索引資料的個數約為:
16*1024 /(8+6) 約等於 1170
二層節點可以儲存的索參數量大約為:
1170 * 1170 = 1368900(百萬級別)
因為非葉子節點只儲存索引資料,因此百萬級別的資料只需進行3次磁碟io,就可查詢到所需資料
1.myisam儲存引擎
索引檔案和資料檔案是分開儲存的,非聚集索引
主鍵索引的葉子節點儲存的是資料檔案中的引用位址
2.innodb儲存引擎
表資料檔案本身就是按照b+tree資料結構組織起來的一種索引檔案
索引檔案和資料檔案是不分離的,聚集索引
主鍵索引的葉子節點儲存的是完整的資料
非主鍵索引檔案的葉子節點儲存的是主鍵值
為什麼innodb表必須有主鍵,並且推薦使用整型的自增主鍵?
因為innodb儲存引擎的表資料檔案,使用的是聚集索引,就是索引檔案和資料檔案儲存在一起,
而且,innodb儲存引擎的表資料儲存方式都是使用的主鍵索引把資料組織在一起儲存的。使用自增的原因
是新增的資料直接新增到後續節點中即可。
為什麼非主鍵索引結構葉子節點儲存的是主鍵值?
為了資料的一致性,儲存資料的時候,只需保證主鍵索引儲存成功即可,而無需等待非主鍵索引資料
儲存成功,才能提交資料;還有節省儲存空間,如果非主鍵索引也儲存資料,那麼有幾個索引則資料就會儲存
幾份,這樣造成空間的浪費和資料冗餘。
比如,聯合索引的字段為 (code,name,birthdate),那麼索引的結構是先按照code的順序,向b+tree結構
新增資料,然後,如果code的值相同再按照name的順序向b+tree結構新增資料,最後如果code和name的值相
同再根據birthdate的順序向b+tree結構新增資料。
換一種理解方式:把 code + name + birthdate 拼接起來,當成乙個字元傳理解聯合索引,這樣和單列索引
就一樣了。
Mysql索引底層原理分析
mysql索引底層原理分析,mysql索引的本質 mysql索引的底層原理 mysql索引的實戰經驗 面試問 資料庫中最常見的慢查詢優化方式是什麼?同學a 加索引。問 為什麼加索引能優化慢查詢?同學a 不知道同學b 因為索引其實就是一種優化查詢的資料結構,比如mysql中的索引是用b 樹實現的,而b...
mysql 索引底層原理分析
一 區分幾個概念 1 頁 1 頁號 記錄當前是第幾頁。2 頁目錄 記錄行資料,標記行開始的最小主鍵索引資料。3 行資料 標識每一行的資料。1 111a 標識第一行資料,1 表示主鍵索引。行與行資料使用鍊錶有序相連。2 b 樹 多個頁相互連線在一起,為了方便查詢會再向上生成乙個新的類似頁的東西,記錄頁...
mysql索引結構及其原理
1 定義 索引是一種資料結果,幫助提高獲取資料的速度 為了提高查詢速度,有很多查詢優化演算法。但是每種查詢演算法都只能應用於特定資料結構之上。索引就是資料庫建立的滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料 2 目前大部分資料庫系統及檔案系統都採用b tree或其變種b tr...