Mysql 數據庫索引介紹

  1. MySQL索引
    1. 介紹

*  使用索引的主要目的是爲了優化查詢速度

* 索引是一種特殊的文件或者叫數據結構(InnoDB數據表上的索引是表空間的一個組成部分),它們包含着對數據表裏所有記錄的引用指針。更通俗的說,數據庫索引好比是一本書前面的目錄,能加快數據庫的查詢速度

    1. 索引的分類
  1. 索引是在存儲引擎中實現的,也就是說不同的存儲引擎,會使用不同的索引

  *  MyISAM和InnoDB存儲引擎:只支持BTREE索引, 也就是說默認使用BTREE,不能夠更換   *  MEMORY/HEAP存儲引擎:支持HASH和BTREE索引

  1. 索引的分類

       * 單列索引:

                     * 普通索引:MySQL中基本索引類型,沒有什麼限制,允許在定義索引的列中插入重複值和空值,純粹爲了查詢數據更快一點。

                     * 唯一索引:索引列中的值必須是唯一的,但是允許爲空值,

                     * 主鍵索引:是一種特殊的唯一索引,不允許有空值

 

       * 組合索引

              * 在表中的多個字段組合上創建的索引,只有在查詢條件中使用了這些字段的左邊字段時,索引纔會被使用,使用組合索引時遵循最左前綴集合

       * 全文索引

              * 全文索引,只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT類型字段上使用全文索引。

       * 空間索引:不做介紹,一般使用不到。

 

    1. 索引的使用
      1. 創建索引
  1. 單列索引之普通索引

CREATE INDEX index_name ON table(column(length))

ALTER TABLE table_name ADD INDEX index_name ON (column(length))

  1. 單列索引之唯一索引

CREATE UNIQUE INDEX index_name ON table(column(length))

  1. 單列索引之全文索引

CREATE FULLTEXT INDEX index_name ON table(column(length))

  1. 聯合索引

ALTER TABLE article ADD INDEX index_titme_time (title(50),time(10))

      1. 刪除索引

DROP INDEX index_name ON table

    1. 索引的存儲結構

https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

  1. B Tree和B+ Tree的特點與區別

* 樹的高度一般都是在2-4這個高度,樹的高度直接影響IO讀寫的次數。

* 如果是三層樹結構---支撐的數據可以達到20G,如果是四層樹結構---支撐的數據可以達到幾十T

*  B Tree和B+ Tree的最大區別在於非葉子節點是否存儲數據的問題。B Tree是非葉子節點和葉子節點都會存儲數據。而B+ Tree只有葉子節點纔會存儲數據,而且存儲的數據都是在一行上,而且這些數據都是有指針指向的,也就是由順序的。

  1. 非聚集索引

 * 葉子節點只會存儲數據行的指針,簡單來說數據和索引不在一起,就是非聚集索引。

 * 主鍵索引和輔助索引都會存儲指針的值

  1. 聚集索引(InnoDB)

* 主鍵索引(聚集索引)的葉子節點會存儲數據行,也就是說數據和索引是在一起,這就是聚集索引。

* 輔助索引只會存儲主鍵值

* 如果沒有沒有主鍵,則使用唯一索引建立聚集索引;如果沒有唯一索引,MySQL會按照一定規則創建聚集索引。

    1. 使用索引的注意事項
  1. 儘量創建組合索引(組合索引其實會默認按照最左前綴原則幫我們創建多組索引)

       組合索引(id,name,sex)

  1. 索引最左前綴原則
  2. 索引覆蓋:要查詢的列,也要使用索引覆蓋住
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章