——引子
在前幾次,窩瓜給大家簡單介紹了關於MySQL中的一些常見的問題,今天就脫離初級的MySQL,進入MySQL中一些比較高級的部分,最先給大家帶來的,當然就是這無比重要的索引了!
索引的介紹
相信,索引這個詞大家都已經不陌生了,在各種語言中,索引這個詞一直是伴隨着小夥伴們的~
在一般的語言,像是C、JAVA等語言中,索引最常出現的地方,就是有關於我們數組的知識了。
沒錯,在這些地方,我們可以將索引理解爲所謂的下標,通過這個下標,我們能夠快速的在數組之中定位我們所要查找的元素,效率非常高!
那麼問題來了,在MySQL中的索引,和許多語言中的索引,到底有什麼區別呢?還是說——其實是一樣的?
當然不是,MySQL中的索引,並不是指所謂的下表,也不是一些所謂的字典,而是一種數據結構!
沒錯,在MySQL中,索引是一種數據結構!MySQL中的索引,有着兩個功能:排序、查找!
對於數據庫,最重要的一環,無非就是查找。那麼,怎樣查找的既準確又迅速,就是我們最爲關心的事情了。
所以,爲了使得我們的查詢操作更爲迅速,在MySQL中就提供了這樣的一種數據結構,索引!
索引的分類
在MySQL中,我們簡單的將索引分爲以下幾種類型:
- 單值索引
- 複合索引
- 唯一索引
單值索引: 一個索引只包含單個列,一張表之中,可以含有多個單值索引
複合索引: 一個索引包含多個列
唯一索引: 索引列的值必須是唯一的,但是可以是空值
索引結構
既然說索引是一種數據結構,那麼,它的結構到底是什麼樣的呢?
以下就是關於索引結構的分類:
- BTree索引
- Hash索引
- full-text索引
- 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. 查詢中統計或者分組字段
不適合建立索引:
- 表的記錄太少
- 經常增刪改的表
- 擁有太多的重複內容
- 頻繁更新的字段不要創建索引
- where字段中的不要建立索引