MySQL索引機制

——引子

在前幾次,窩瓜給大家簡單介紹了關於MySQL中的一些常見的問題,今天就脫離初級的MySQL,進入MySQL中一些比較高級的部分,最先給大家帶來的,當然就是這無比重要的索引了!

索引的介紹

相信,索引這個詞大家都已經不陌生了,在各種語言中,索引這個詞一直是伴隨着小夥伴們的~

在一般的語言,像是C、JAVA等語言中,索引最常出現的地方,就是有關於我們數組的知識了。

沒錯,在這些地方,我們可以將索引理解爲所謂的下標,通過這個下標,我們能夠快速的在數組之中定位我們所要查找的元素,效率非常高!

那麼問題來了,在MySQL中的索引,和許多語言中的索引,到底有什麼區別呢?還是說——其實是一樣的?

當然不是,MySQL中的索引,並不是指所謂的下表,也不是一些所謂的字典,而是一種數據結構

沒錯,在MySQL中,索引是一種數據結構!MySQL中的索引,有着兩個功能:排序、查找!

對於數據庫,最重要的一環,無非就是查找。那麼,怎樣查找的既準確又迅速,就是我們最爲關心的事情了。

所以,爲了使得我們的查詢操作更爲迅速,在MySQL中就提供了這樣的一種數據結構,索引!

索引的分類

在MySQL中,我們簡單的將索引分爲以下幾種類型:

  1. 單值索引
  2. 複合索引
  3. 唯一索引

單值索引: 一個索引只包含單個列,一張表之中,可以含有多個單值索引

複合索引: 一個索引包含多個列

唯一索引: 索引列的值必須是唯一的,但是可以是空值

索引結構

既然說索引是一種數據結構,那麼,它的結構到底是什麼樣的呢?

以下就是關於索引結構的分類:

  1. BTree索引
  2. Hash索引
  3. full-text索引
  4. R-Tree索引

這裏要注意,我們平時所說的索引,在沒有特殊情況下的時候,就是B+樹結構,也就是多路搜索樹!

而對於其他的三種索引,也就是 Hash索引full-text索引R-Tree索引,窩瓜在這裏就不做介紹了,如果有小夥伴想要了解,過一段時間窩瓜會給大家帶來關於DBA方向的一些介紹,在哪裏,窩瓜會詳細的給大家介紹這三種索引!

關於索引,還有着非常重要的一點,那就是:由於索引本身很大,所以不會儲存在內存中,而是以索引文件的形式存在磁盤中!

索引的建立

關於索引的建立,在MySQL中的語法如下:

CREATE INDEX 索引名 on 表名(字段名);
//第一種建立方式
ALTER TABLE 表名
ADD [UNIQUE] INDEX [索引名] ON (字段名);
//第二種建立方式

創建幾種類型的索引:

ALTER TABLE 表名
ADD PRIMARY KEY (列名);
//創建主鍵
ALTER TABLE 表名
ADD UNIQUE 索引名(字段);
//創建唯一索引
ALTER TABLE 表名
ADD INDEX 索引名(字段);
//創建普通索引
ALTER TABLE 表名
ADD FULLTEXT 索引名(字段);
//全文索引

刪除索引:

DROP INDEX [索引名] ON 表名;

查看索引:

SHOW INDEX FROM 表名;

總結

以上就是對於索引的一些介紹,其實小夥伴們可以這樣理解,在MySQL庫中,每一張表格都有一個它自己所對應的樹,而這棵樹就是索引,索引將我們選中的字段,提前進行排序,然後等我們需要查找的時候,就可以利用這棵樹進行查找,如果可以用到索引,那麼查找的效率就會大大的提高,反之;

不過,這些都是在索引優化中要給大家介紹的,現在大家,只需要知道索引到底是什麼,並且知道怎樣在MySQL中建立它就足夠了,關於索引優化,在下次,窩瓜將會給大家帶來~

如果大家還是搞不懂究竟什麼時候應該建立索引,什麼時候不應該建立,那窩瓜這裏就給大家列出一下思考的方向,希望對大家有幫助:

適合建立索引:

1.主鍵自動建立唯一索引
2. 頻繁查找的需要建立索引
3. 查詢中與其他表關聯的字段,外鍵關係建立索引;
4. 最好使用複合索引
5. 查詢中排序的字段,排序字段若通過索引去訪問將大大提高查詢速度
6. 查詢中統計或者分組字段

不適合建立索引:

  1. 表的記錄太少
  2. 經常增刪改的表
  3. 擁有太多的重複內容
  4. 頻繁更新的字段不要創建索引
  5. where字段中的不要建立索引
發佈了11 篇原創文章 · 獲贊 0 · 訪問量 7058
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章