你認識的「索引」那些事兒

  • 2019 年 10 月 8 日
  • 筆記
  1. 01

索引的本質

其實提到索引這個名詞,有些抽象我們不太好理解這個名詞。你轉換下思路和學習方法。你會發現其實生活中的索引無處不在。

比如:

我們上廁所,我們要看男生女生索引標誌,這樣才不能走錯。

我們逛商城,我們要看樓層索引標誌,這樣才能明白各個樓層都在賣什麼,玩什麼。

我們日常做的生活規矩索引貼,告訴我們6:50起床、7:00吃早餐 7:30上班上學 ……..

有了這些索引,它讓我們生活都有順序和目標。

今天給大家聊聊索引,希望大家喜歡。

  1. 02

數據庫索引本質是什麼?

數據庫索引的本質:索引是為了加速對表中數據行的檢索,而創建的一種分散存儲的數據結構。強調它是一種數據結構。(引申:數據結構可以理解為計算機存儲、組織數據方式。)

你在這張圖中發現了什麼?

我說:它是一棵樹,有好多的樹枝。

我說:green 綠色,青蛙是綠色的,大樹是綠色的。yellow 黃色,香蕉是黃色的。purple 紫色,葡萄是紫色的。Orange 橙色,橙子是橙色的。Blue 藍色。通過這個樹就可以學習好多的顏色。

我說:每個箭頭指示是一種方向。

  1. 03

索引是怎麼工作的?

索引的工作機制是:其實就是在查詢檢索時,通過索引這個對象直接指向目標對象。

你在這張圖中發現了什麼?

我說:它是一棵音節樹,音節有三種分支,分為:聲母、韻母、聲調。

我說:其中聲母這條線指向b p m f d t n l g k h j q x zh ch sh r z c s y w 這些字母。

我說:其中韻母這條線指向a o e ai ei ao ou an en ang eng ong i ia ie iao iou ian in iang iong u ua uai uan uen uang ueng ü üe üan ün 這些對象。

其實聲母、韻母、聲調就是索引,就是分類。

  1. 04

索引的作用是什麼?

索引的作用其實是提高數據檢索性能的一種手段。

這是一張學生數據,裏面有學生name age phonenum等信息。

你在這張圖中發現了什麼?

我說:通過ID=103 就可以直接檢索查詢到103對象的這個人員信息。通過這個ID進行值檢索就很快找到目錄數據了,從而提高數據查詢的速度了。這就是索引的實際的作用。

  1. 05

哪些數據結構可以用來作為索引?

通過我們說的有這些數據結構可以用來作為索引:數組、hashMap 、 hashtable 、樹形索引。數組索引它的執行速度快但它必須是正整數。hashMap可以理解是一個容器;hashTable 是key-value這種鍵值對的方式存儲的。它們都可以用於索引的創建 。但它們都有優點也有劣勢缺點的地方:數組索引它的執行速度快但它必須是正整數;hashMap 線程不安全,遍歷速度慢;hash索引它的劣勢在於:不利於範圍查詢,沒有比較大小的優勢。

你在這張圖中發現了什麼?

其實每件事物它的存在都是有優勢和劣勢的,沒有百分百的完整。

  1. 06

常用的樹型索引

樹形檢索是數據庫的一種索引方式,也是索引中最常用的一種索引方式。

二叉查找樹

二叉查找樹(Binary Search Tree)(二叉搜索樹,二叉排序樹)它或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 它的左、右子樹也分別為二叉排序樹。

你只需要記住它的特點:「左比右小,每個節點兩個分叉」;二叉搜索樹的平均查找長度及時間複雜度給它帶來的問題就是:IO性能差,如果樹很高的話,深度很深的話,查詢起來非常麻煩。

B-樹(B-tree)

比如:二叉查找樹,平衡二叉查找樹,他們查找效率的時間複雜度O(log2n),跟樹的深度有關係,那麼怎麼樣才能提高效率呢?當然最快捷的方式就是減少樹的深度了。那麼怎麼減少樹的深度呢?

基本思想是:採用多叉樹結構。

也就是說,因為磁盤的操作費時費資源,過於頻繁的多次查找勢必效率低下。

也就是說,只要我們通過某種較好的樹結構減少樹的結構盡量減少樹的高度,便能有效減少磁盤查找存取的次數。

那這種有效的樹結構是一種怎樣的樹呢?

B-樹(B-tree) 可以理解是種:多路平衡樹,它實際就是體現在數據中就是多個關鍵字,通過多個關鍵字的索引創建,就能在大數據量的數據中查詢檢索出你想定位的數據信息。

  1. 07

其實講了這麼多,那最後咱們總結一下吧。

索引本質是什麼?

你在這張圖中發現並看到了什麼?

索引就是一種指示、一種方向標。

寫作說明】以上內容分享給喜歡編程,有夢想的程序員,希望能幫助到你們。以上文章屬於此公眾號原創所有,如需轉載請註明出處。

免責申明】本公眾平台不是廣告商,也沒有為其他三方網站或者個人做廣告宣傳。此分享的源代碼和文章是小編在項目中、學習中整理的一些認為不錯的項目。用戶產生的一些自願下載或者付費行為。與平台沒有直接關係