1. 程式人生 > 其它 >MySql之---索引

MySql之---索引

由於索引問題經常在面試中問到,今天對索引進行一個系統的總結。

一、是什麼?

  索引是對資料庫表中一列或多列的值進行排序的一種結構。是一個單獨的、儲存在磁碟上的資料庫結構,包含著對資料庫表裡所有記錄的引用指標。

二、優缺點

優點:

  通過建立唯一索引,可以保證資料庫表中每一行資料的唯一性

  大大加快了查詢速度

  在使用分組和排序子句進行資料查詢時,可以減少查詢中分組和排序的時間

缺點:

  建立和維護索引需要耗費時間

  索引佔用額外的儲存空間

  降低了插入、刪除、更新的效率

三、分類

1、普通索引和唯一索引

  普通索引:允許在定義索引列中插入重複值和空值

  唯一索引:允許有空值,但值必須唯一 【主鍵索引不允許有空值】

2、單列索引和組合索引

  單列索引:一個索引只包含單列

  組合索引:表中多個欄位組合上建立的索引,遵循最左字首集合

3、全文索引

  定義:在定義索引的列上支援值的全文查詢,允許插入重複值和空值

  適用範圍:希望通過關鍵字的匹配來進行查詢過濾,那麼就需要基於相似度的查詢,而不是原來的精確數值比較。

  在使用全文索引的時候有幾個注意事項:

  • 所包含的值的個數必須大於4個
  • 所包含的值的長度必須大於4個(最小搜尋長度)

4、空間索引

  對空間型別的欄位建立的索引

  空間型別:geometry、point、linestring、polygon

四、設計原則

1、並非越多越好:一個表中有大量索引不僅佔用較大的磁碟空間,還會影響插入、刪除、更新的效能

2、避免對經常更新的表進行過多的索引,並且索引中的列儘可能小

3、資料量小的表最好不要使用索引:查詢花費的時間可能比遍歷索引的時間還要短

4、在頻繁進行排序或分組的列上建立索引

5、當唯一性是某種資料本身的特徵時,指定唯一索引

五、面試中問到的一些問題

1、聚簇索引與非聚簇索引的區別

  (1)聚簇索引:並不是一種單獨的索引型別,而是一種資料儲存方式(B+樹),將資料儲存與索引放到了一塊,找到索引也就找到了資料。

  (2)非聚簇索引:其葉子節點並不包含行記錄的全部資料,除了包含鍵值外,還包含了相應行資料的聚簇索引鍵。

2、組合索引的最左字首

  首先根據組合索引中最左邊的、也就是第一個欄位進行排序,在第一個欄位排序的基礎上,再對組合索引中後面的第二個欄位進行排序,依此類推。

特性:

  對於聯合索引,MySQL 會一直向右匹配直到遇到範圍查詢(> , < ,between,like)就停止匹配。比如 a = 3 and b = 4 and c > 5 and d = 6,如果建立的是(a,b,c,d)這種順序的索引,那麼 d 是用不到索引的,但是如果建立的是 (a,b,d,c)這種順序的索引的話,那麼就沒問題,因為範圍查詢c是最後一個。
  = 和 in 可以亂序,比如 a = 3 and b = 4 and c = 5 建立 (a,b,c)索引可以任意順序。
  如果建立的索引順序是 (a,b)那麼直接採用 where b = 5 這種查詢條件是無法利用到索引的。