亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mysql索引的簡單介紹

發布時間:2021-09-16 03:25:37 來源:億速云 閱讀:134 作者:chen 欄目:大數據

本篇內容介紹了“Mysql索引的簡單介紹”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

我們都知道,數據庫索引可以幫助我們更加快速的找出符合的數據,但是如果不使用索引,Mysql則會從第一條開始查詢,直到查詢到符合的數據,這樣也會導致一個問題:如果沒有添加索引,表中數據很大則查詢數據花費的時間更多。而這時候我們為字段添加一個索引,Mysql就會快速搜索數據,可以節省大量時間。MyISAMInnoDB是最經常使用的兩個存儲引擎,  MyISAM  和  InnoDB  索引都是采用  B+  樹的數據結構,那  B  樹和  B+  樹的區別是什么呢?

B樹  
B  樹是一種多路搜索樹,搜索時從根節點開始,對節點內的有序關鍵字進行二分查找,如果命中則結束搜索,否則根據搜索大小結果進入左右子節點重復搜索,直到找到搜索結果。  

特點:
  • 關鍵字分布在B樹所有節點。

  • 關鍵字不會重復出現在多個節點。

  • 搜索可能在非葉子節點就結束。

B+樹

B+樹實際上是一種特殊的B樹,和B樹感官最明顯的一個不同點在于B+樹關鍵字只會出現在葉子結點中,并且關鍵字在鏈表中是有序的,也就是B+樹的搜索最后只會在葉子結點中命中結果,那非葉子結點在B+樹充當什么角色呢?非葉子節點在B+樹中相當于是葉子結點的索引,而葉子結點是存儲關鍵字數據的數據層。既然Mysql索引采用B+樹的數據結構,那么相比于B樹,B+樹做索引的優勢在哪里呢:

  • 磁盤讀寫代價更低。

  • 查詢效率更穩定。

  • 遍歷元素效率高。

講完了B樹和B+樹的概念,接下來就需要開始談談索引了。其實Mysql索引的數據結構有兩種:B+樹、Hash。但是在MyISAMInnoDB存儲引擎當中只能使用B+樹,索引其實總共可以分為四類:

  • 單列索引:單列索引有三種,包括普通索引、唯一索引、主鍵索引

  • 組合索引

  • 全文索引

  • 空間索引

單列索引

單列索引,顧名思義就是一個索引只能作用于單列,但是一個數據表可以同時擁有多個單列索引。單列索引一共有三種:普通索引、唯一索引、主鍵索引。

  • 普通索引:基本的索引類型,不會對數據加入任何限制,一樣允許添加了普通索引的普通索引的數據列存在空值或重復值,添加普通索引的目的只是為了查詢數據會更快一點。

  • 唯一索引:對單列添加唯一索引,就代表這個列只能是唯一值,比如用戶表用戶名可以添加唯一索引,這樣用戶名必須是唯一值,但是可以為空值。

  • 主鍵索引:其實就是在唯一索引的基礎上,不允許列出現空值的存在。

組合索引

選中數據表的多列組合然后創建索引,但是組合索引并不是說創建成功都可以被使用,而是需要遵循最左前綴集合。也就是只有在查詢條件中使用了這些字段的左邊字段,組合索引才會生效。下面我們舉個例子來解釋下什么叫做最左前綴。

首先創建一個表test_10_09,并且將id, username, sex三個列組合然后添加索引。

CREATE TABLE test_10_09 (  id INT NOT NULL,  username VARCHAR (20) NOT NULL,  idcard VARCHAR (18),  sex VARCHAR (3) NOT NULL,  INDEX MultiIdx (id, username, sex))

我們說組合索引想要生效需要滿足最左前綴。那什么叫做最左前綴呢?最左前綴其實就是利用組合索引中最左邊的列來匹配數據,以上面的例子我們可以看到,組合索引最左邊的列是id,所以說如果我們查詢的條件不包括id,也就是不滿足最左前綴原則,這時候查詢操作是無法利用到我們創建的組合索引的。我們可以使用EXPLAIN指令來測試查詢條件帶與不帶id會有什么效果:

Mysql索引的簡單介紹

Mysql索引的簡單介紹

可以看到我們帶id查詢可以通過索引去查詢,但是查詢不帶id查詢無法觸發最左前綴原則,于是組合索引并沒有生效。

全文索引

全文索引其實就是字面意思,使用全文索引可以在一連串文字中通過某個關鍵詞,就可以找到包含字段的記錄行。但是全文索引有著很多限制:

  • InnoDB存儲引擎不支持使用,只允許在MyISAM存儲引擎中使用。

  • 全文索引只能在char、varchar、text三種類型的數據列使用。

  • 所搜的關鍵字默認至少要4個字符。

  • 全局索引要借助MATCH函數。

空間索引

mysql 5.7開始支持空間索引。空間索引一般是適用于包含空間操作的系統,比如游戲開發。

  • 空間索引只能在GEOMETRY、POINT、LINESTRING、POLYGON4種空間數據類型的數據列使用。并且添加空間索引的數據列必須非空。

  • 在創建空間索引必須使用SPATIAL關鍵字。

索引優點

  • 數據表的所有數據列都可以添加索引。

  • 使用唯一索引或者主鍵索引可以保證數據的唯一性。

  • 使用索引可以提高查詢數據的效率和性能。

索引缺點

  • 使用索引會占用一定的物理空間。

  • 數據插入以及修改都需要維護索引,會影響性能。

索引使用原則

  • 經常需要插入或者更新操作的表不宜設置太多索引,因為數據插入以及修改都需要維護索引,會影響性能。

  • 數據量少的表不建議添加索引,否則可能反而降低查詢效率及性能。

  • 在列取值范圍比較少時不使用索引,比如專業名只有三個取值,使用索引意義確實不大。

  • 組合索引將最經常使用的列放在第一列,保證組合索引能滿足最左前綴的要求。

  • 如果列取值唯一,可以為字段添加唯一性索引,提高查詢效率。

  • 索引盡量添加在數據量比較少的列上面,比如varchar(100)檢索效率肯定沒有varchar(30)來得快,所以說數據量多的列添加索引查詢效率會更慢。

“Mysql索引的簡單介紹”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

贞丰县| 崇州市| 新源县| 泸溪县| 买车| 城固县| 班戈县| 榆中县| 西丰县| 巴彦淖尔市| 肇州县| 房山区| 望谟县| 宁夏| 台前县| 清苑县| 佛山市| 赤峰市| 即墨市| 离岛区| 阿城市| 南城县| 监利县| 彭山县| 酒泉市| 石楼县| 鄂托克旗| 沅江市| 宜都市| 安塞县| 香格里拉县| 馆陶县| 溧阳市| 隆尧县| 北川| 泾阳县| 青神县| 亳州市| 富蕴县| 阳信县| 榆社县|