MySQL數據庫的常用索引

寫在前面:博主是一只經過實戰開發歷練後投身培訓事業的“小山豬”,暱稱取自動畫片《獅子王》中的“彭彭”,總是以樂觀、積極的心態對待周邊的事物。本人的技術路線從Java全棧工程師一路奔向大數據開發、數據挖掘領域,如今終有小成,願將昔日所獲與大家交流一二,希望對學習路上的你有所助益。同時,博主也想通過此次嘗試打造一個完善的技術圖書館,任何與文章技術點有關的異常、錯誤、注意事項均會在末尾列出,歡迎大家通過各種方式提供素材。

  • 對於文章中出現的任何錯誤請大家批評指出,一定及時修改。
  • 有任何想要討論和學習的問題可聯繫我:[email protected]
  • 發佈文章的風格因專欄而異,均自成體系,不足之處請大家指正。

MySQL數據庫的常用索引

本文關鍵字:數據庫、MySQL、索引的作用、常用索引


在使用數據庫的過程中,經常會進行數據的查詢。隨着數據量的增大,查詢的時間會變的原來越長,這就需要合理的建立索引來提高查詢效率。

一、索引概述

1. 數據庫檢索

在講述索引之前我們要先來簡單介紹一下數據庫中是如何進行數據查詢的,這更有助於我們理解索引。對於數據庫來說,本質上是一個軟件,或者可以稱爲一個系統,提供了對於數據管理的功能。存放在數據表中的數據其實同樣是存儲在磁盤上,對於不同的數據庫,會以不同的數據格式文件存在。
在進行數據庫檢索時,尤其是條件查詢,解析SQL指令後,本質上是對數據存儲文件的掃描。我們所使用的絕大部分關係型數據庫的表結構採用的都是行式存儲,也就是一條數據是一行,每一列的數據是在這一行中以某種分隔符來分隔。數據庫在進行數據掃描時也是通過遊標(cursor)以行爲單位來進行操作,與之相對的就是列式存儲(column table),比如HANA。
那麼在進行條件查詢時,會逐行進行掃描,通過移動遊標指定到不同的行,然後再獲取到對應的列的值,比對,確定結果,在數據量比較小的時候我們可以忽略時間問題,但當數據量很大時(千萬級)問題就很明顯了,查詢速度很難接受,在使用索引前,數據查詢的過程可以這樣表示:

2. 索引的作用

說到索引,大家一定都很熟悉目錄,如果我們把數據表看成一本書的話,沒有索引的數據表就好像一本沒有目錄的書,並且內容之間也沒什麼順序可言,那我們除了一頁一頁去翻又有什麼辦法呢?
如果我們將一條數據比作一頁,每列數據就相當於這一頁的內容。這時我們使用索引就可以建立起某列數據與某一條數據的關係,也就是說給定一個查詢條件和信息,我就能夠定位到數據的所在位置。
那麼索引的工作原理和目錄很類似,一旦我們創建了索引,就相當於爲整本書創建了一個動態的目錄,爲什麼是動態?因爲數據是會被修改的嘛。當建立索引的列的數據被修改時,索引中也要及時的更新,保證對應關係是正確的,建立所以後,數據的查詢的過程可以這樣表示:

敲黑板:建立了索引後,當被聲明瞭索引的列作爲條件或排序的列使用時,速度就會明顯提升。也就是說,索引建立以後是個被動技能,符合了使用規則就會自動觸發。

3. MySQL索引存儲類型

在MySQL中,根據存儲和映射方式的不同可將索引分爲兩種:

  • B-Tree:MySQL中使用最爲頻繁的索引類型,是以樹形結構和節點的方式管理。
  • Hash:Hash索引主要用於等值過濾,在這一點上效率要高於B-Tree,但不支持範圍查詢。

二、MySQL常見索引

每一個索引都是建立在一個列上的,一個數據表中可以爲多個列聲明索引。在MySQL數據庫中,常用的索引根據用途和作用效果可以被分爲以下幾類:

1. 普通索引

普通索引是MySQL中最基本索引類型,基本上對列的數據不會加任何的限制,可以允許空值和重複值,最主要的用途就是加快數據的訪問速度。

2. 唯一索引

唯一索引指的是對數據添加了唯一性約束,這一列的數據當中不能夠出現重複的值,但是可以有null值(至多有一個)。在創建唯一索引時會進行數據校驗,如果此時已經有了重複數據,則索引創建失敗。在建立唯一索引後,再向表中插入已有的重複數據時,也會被拒絕。

3. 主鍵索引

主鍵索引的特點是:非空、唯一。所以如果我們想找一列作爲每條數據的唯一標識,就會將這一列聲明爲主鍵。由於主鍵的特點,經常會被作爲其他表外鍵的參照列,也是在進行數據同步時的主要參照

4. 複合索引

同一索引類型作用在多個不同列上時,可以稱之爲組合索引,對於主鍵索引,有一個特別的稱呼:複合主鍵。(注意:複合主鍵與聯合主鍵不是同一個含義,聯合主鍵指的是將多個主鍵的值聯合在一起,常出現在多對多邏輯的中間表中,比如:將兩個有關聯的數據主鍵定義在中間表中,然後再爲中間表設立一個主鍵來唯一標識每一條關聯數據)

5. 全文索引

全文索引主要是作用在數據類型爲CHAR、VARCHAR、TEXT的列上,用於長文本的字符串搜索加速。使用全文索引時,自然語言搜索的效率要大於LIKE關鍵字。

6. 空間索引

空間索引主要是針對空間數據類型的列建立的,如:GEOMETRY。如果在某一列上建立空間索引,則必須聲明爲:NOT NULL,只有MyISAM引擎的表支持空間索引。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章