索引原理
用b樹/b+樹作為儲存資料結構,通過索引進行二分法查詢。由於mysql索引和資料都是儲存在磁碟,每次查詢都是磁碟io載入到記憶體進行比較查詢,b樹的高度低減少了磁碟io次數,提高了查詢效率。索引結構
查詢過程
1 io讀取根節點資料,在記憶體中比較,得到子節點指標索引建立和使用規則2 重複1,直到得到葉子節點資料指標
3 通過資料指標得到資料
1 最左匹配原則,範圍查詢的字段索引無效(>、聚簇索引(主鍵索引)和非聚簇索引(非主鍵索引)2 索引建在區分度高的字段。因為區分度低意味著非葉子節點的關鍵少,資料全集中在葉子節點,並且產生大量io和記憶體查詢。
主鍵索引的葉子節點儲存的是整行資料,非主鍵索引的葉子節點儲存的是主鍵的值。如下圖所示:非主鍵索引的查詢需要兩次查詢索引失效案例
當全表掃瞄的時間成本小於索引查詢的時間成本時會直接通過全表掃瞄參考文章:mysql innodb一頁是16k,假設記錄總數為n
1 計算全表掃瞄一共會掃瞄多少頁:show table *** like 'salary_static'得到全表的大小x byte(data_length),所以一共要掃瞄 disktime = x/1024/16個記錄頁
timecost1 = disktime * t1 + n * t2 (t1為io單位時間,t2為cpu單位時間)
2 通過索引查詢:如果是非主鍵索引,查詢時需要回表,msql認為每次回表的時間需要一次單獨io的時間。假設走索引需要掃瞄k條記錄,預設忽略掉索引的查詢時間。
timecost2 = k * t1 + k * t2(t1為io單位時間,t2為cpu單位時間)
如果timecost1 > timecost2,那麼mysql會走全表掃瞄。
MYSQL 基礎 索引原理
資料庫索引是儲存在磁碟上的,當資料量比較大的時候,索引的大小將會達到幾個g。當我們利用索引查詢的時候,無法把整個索引全部載入到記憶體中。而是逐一載入每乙個磁碟頁,這裡的磁碟頁對應索引樹的結點。b 樹,一種平衡多路查詢樹。適用於查詢磁碟中的大量資料。為了減少io次數,b樹最明顯的特徵是 矮胖的 即深度...
倒排索引原理 機器學習基礎 倒排索引與搜尋引擎
在介紹倒排索引之前,我們先來看看什麼是索引。索引是資料庫當中的概念,維基百科中的說法是 資料庫索引,是資料庫管理系統中乙個排序的資料結構,以協助快速查詢 更新資料庫表中資料 可以簡單地把索引當成是字典裡的檢索目錄,我們比如我們要查乙個叫 index 的單詞,通過目錄,可以快速地找到字母i開始的位置。...
MySQL索引原理之索引原理
索引定義 是儲存引擎用於快速查詢記錄的一種資料結構。需要額外開闢空間和資料維護工作。索引是物理資料頁儲存,在資料檔案中 innodb,ibd檔案 利用資料頁 page 儲存。索引可以加快檢索速度,但是同時也會降低增刪改操作速度,索引維護需要代價。索引涉及的理論知識 二分查詢法 hash和b tree...