成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

關于MySQL的索引專題——認識索引

數據庫 MySQL
本文目的主要是對MySQL的索引有個概念上的認識,以及了解索引的類型,索引和存儲引擎之間的關系,本專題會繼續更新,繼續對MySQL索引知識逐漸展開。

關于這個專題

想寫MySQL的索引專題是源于之前自己在學習MySQL索引時痛苦的經歷,你在網上搜索關于MySQL的索引的文章,大多是支離破碎,沒有系統性的對知識點的羅列堆砌,文章中會說明你要如何如何做,但是很少涉及去講為什么要這么做,哪些不能做,很難對MySQL有一個系統性的認知,學習如果沒有系統性的話,就很難在實際的項目中靈活運用,出于此目的,自己就打算寫一個關于MySQL索引的專題系列,算是自己一個學習的總結,如果同時能幫到你那再好不過了。下面進入正題,我們先來了解一下什么是索引以及索引的類型。

認識索引

認識索引是什么東西非常關鍵,一個非常恰當的比喻就是書的目錄頁與書的正文內容之間的關系,為了方便查找書中的內容,通過對內容建立索引形成目錄。因此,首先你要明白的一點就是,索引它也是一個文件,它是要占據物理空間的。

比如對于MyISAM存儲引擎來說:

.frm后綴的文件存儲的是表結構。

.myd后綴的文件存儲的是表數據。

.myi后綴的文件存儲的就是索引文件。

如下圖所示:

 

對于InnoDB 存儲引擎來說:

.frm后綴的文件存儲的是表結構。

.ibd后綴的文件存放索引文件和數據(需要開啟innodb_file_per_table 參數)

如下圖所示:

因此,當你對一張表建立索引時,索引文件的大小也會改變,當你數據表中的數據因為增刪改變化時,索引文件也會變化的,只不過MySQL會自動維護索引,這個過程不需要你介入,這也是為什么不恰當的索引會影響MySQL性能的原因。

總結:

1. 索引是按照特定的數據結構把數據表中的數據放在索引文件中,以便于快速查找;

2. 索引存在于磁盤中,會占據物理空間。

索引的類型

上面說到,索引文件時按照不同的數據結構來存儲的,數據結構的不同也產生了不同的索引類型,常見的索引類型包括:

  1. B-Tree索引
  2. 哈希索引
  3. 空間數據索引(R-Tree)
  4. 全文索引

下面做一一介紹:

1. B-Tree索引

B-Tree索引是最常用的一種索引,如果沒有指定特定的類型,那么多半就是B-Tree索引,事實上,很多搜索引擎使用的是它的變種B+Tree,這是對B-Tree的一個優化,如果需要詳細了解,可以參考數據結構方面的書籍,這里不做詳細探討。以下統稱為B-Tree索引。

絕大多數的存儲引擎,比如MyISAM和InnoDB都支持這種索引,因此說它是應用最廣泛,最常用的一種索引方式,但是不同的存儲引擎在具體實現時會稍有不同,比如MyISAM會使用前綴壓縮的方式對索引進行壓縮,InnoDB則不會。

下圖展示了B-Tree索引是如何存儲被索引的數據的: 

 

說明:

左圖是一個包含三列的數據表,右圖則展示了數據是如何被索引的。

可以看出B-Tree是對索引列是按照順序存儲的,每個葉子節點指向被索引的數據,這也是B-Tree索引支持范圍查找數據的原因。

2. 哈希索引

相比于B-Tree索引,哈希索引的實現就比較簡單了,它是基于哈希表來實現的,對于要索引的列,存儲引擎會計算出一一對應的哈希碼,然后把哈希碼存放在哈希表中作為key,value值是指向該行數據的指針。

下圖是簡單的原理展示:

 

說明:

  1. 左邊紫色圖表示一個二列的數據表。
  2. 中間表示對fname列進行哈希索引,計算出哈希值。
  3. 右邊綠色圖表示把生成的哈希值存放于哈希表中。

當我們執行以下查詢時:

  1. select * from testTable where fname = "mary"

MySQL會首先計算查詢條件mary的哈希值,然后到哈希表中去找該哈希值,如果找到了根據對應的指針也就找到了需要尋找的數據行。

哈希表的優勢與限制:

優勢:

  1. 只需比對哈希值,因此速度非常快,性能優勢明顯;

限制:

  1. 不支持任何范圍查詢,比如where price > 150,因為是基于哈希計算,支持等值比較。
  2. 哈希表是無序存儲的,因此索引數據無法用于排序。
  3. 主流存儲引擎不支持該類型,比如MyISAM和InnoDB。哈希索引只有Memory, NDB兩種引擎支持。

因此,哈希索引雖然速度快,但其實使用很受限,只適用于某些特殊的場合。

3. 空間數據索引(R-Tree)

空間索引可用于地理數據存儲,它需要GIS相關函數的支持,由于MySQL的GIS支持并不完善,所以該索引方式在MySQL中很少有人使用。

4. 全文索引

全文索引主要用于海量數據的搜索,比如淘寶或者京東對商品的搜索,你不可能使用like進行模糊匹配吧,MySQL從5.6開始支持InnoDB引擎的全文索引,功能沒有專業的搜索引擎比如Sphinx或Solr豐富,如果你的需求比較簡單,可以嘗試一下MySQL的全文索引,否則建議使用專業的搜索引擎。

總結:

1. B-Tree索引使用最廣泛,主流引擎都支持。

2. 哈希索引性能高,適用于特殊場合。

3. R-Tree不常用。

4. 全文索引適用于海量數據的關鍵字模糊搜索。

索引和存儲引擎之間的關系

上面講述了索引有不同的類型,存儲引擎也有不同的類型,那么索引和存儲引擎之間有什么關系呢?

首先你需要知道,在MySQL中,索引是在存儲引擎中實現的,并不是所有的存儲引擎都支持所有的索引類型,比如哈希索引,MyISAM和InnoDB是不支持的;同樣,即使對于同一類型的索引,不同的存儲引擎實現的方式也可能是不同的,比如MyISAM和InnoDB對B-Tree索引,具體的實現是有差別的。

總結:

1. 不同的存儲引擎可能支持不同的索引類型;

2. 不同的存儲引擎對同一中索引類型可能有不同的實現方式。

B-Tree索引與唯一索引,主鍵索引,普通索引的關系

最開始對B-Tree索引與唯一索引,主鍵索引,普通索引這幾種索引的關系很模糊,網上也沒搜索到相關的資料,以為他們的關系是并列的,其實并不是,B-Tree只是底層的算法實現,唯一索引,主鍵索引,普通索引都是基于B-Tree索引算法的,只不過又有各自的特點。

通過下圖也可看出這種關系:

 

至于唯一索引,主鍵索引,普通索引之間的區別,下面補充一下:

  • 主鍵索引:數據列不允許重復,不允許為NULL.一個表只能有一個主鍵。
  • 唯一索引:數據列不允許重復,允許為NULL值,一個表允許多個列創建唯一索引。
  • 普通索引:基本的索引類型,沒有唯一性的限制,允許為NULL值。

總結:

這篇文章先說到這里,目的主要是對MySQL的索引有個概念上的認識,以及了解索引的類型,索引和存儲引擎之間的關系,本專題會繼續更新,繼續對MySQL索引知識逐漸展開,如果你感興趣的話可以關注該專欄,以及順便動動手指關注一下我(^_^),希望本文對你有所幫助。 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2021-05-09 09:57:26

MySQL數據庫索引

2017-09-05 12:44:15

MySQLSQL優化覆蓋索引

2015-10-30 15:55:43

MySQL

2020-09-28 15:34:38

ElasticSear索引MySQL

2010-10-12 13:42:11

MySQL單列索引

2022-07-25 15:03:13

PandasPython

2010-10-12 13:37:54

mysql索引

2010-10-12 14:09:34

MySQL索引

2010-07-19 15:50:53

SQL Server索

2017-09-22 09:20:06

數據庫索引

2022-03-25 10:38:40

索引MySQL數據庫

2023-05-12 17:45:15

MySQL索引排序

2010-05-26 13:42:08

MySQL數據庫索引

2011-03-31 13:51:54

MySQL索引

2015-06-15 14:58:16

MySQL索引

2010-10-12 16:50:14

MySQL Hash索

2010-11-11 15:48:54

MySQL單列索引

2012-06-21 10:18:43

索引搜索Java

2021-03-22 17:20:48

MYSQL開發數據庫

2015-05-20 13:48:26

MySQL索引
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 永久免费在线观看 | 中文字幕国产精品 | 日本不卡一区 | 91视视频在线观看入口直接观看 | 国产成人艳妇aa视频在线 | 欧美一卡二卡在线观看 | 久草视频网站 | 成人av播放 | 欧美日韩精品一区二区三区蜜桃 | 97精品视频在线 | 亚洲日韩中文字幕 | 国产成人综合网 | 高清一区二区三区 | 成人精品国产一区二区4080 | 国产日韩一区二区三区 | 亚洲最大福利网 | 亚洲成人一级片 | 久久久久久国 | 美女黄色在线观看 | 一级aaaa毛片 | 亚洲成色777777在线观看影院 | 日本一区二区三区免费观看 | www.五月天婷婷 | 91在线色视频| 国产日韩欧美在线观看 | 日韩精品一区二区在线观看 | 欧洲国产精品视频 | 国产精品久久二区 | 免费激情| 国产精品久久9 | 亚洲免费在线观看av | 日本不卡一二三 | 亚洲大片在线观看 | 日韩免费视频一区二区 | www中文字幕 | 亚洲国产精品一区在线观看 | 日韩理论电影在线观看 | 国产精品免费一区二区 | 国产在线二区 | 在线播放国产一区二区三区 | 啪啪网页|