1. 程式人生 > >MySQL索引的作用和分類介紹

MySQL索引的作用和分類介紹

索引介紹

什麼是索引?為什麼要建立索引?

      索引用於快速在某一列中找到特定的值,不適用索引的話,mysql必須從讀取這張表的所有記錄,直到找到相關的值,表越大查詢資料所花費的時間就越多。如果所要查詢的列中有索引的話,MySQL就能快速到達一個位置去搜素資料檔案,而不必檢視所有資料,因此使用索引將節省很多時間。
       例如:有一張person表,其中有2W條記錄,記錄著2W個人的資訊。有一個Phone的欄位記錄每個人的電話號碼,現在想要查詢出電話號碼為xxxx的人的資訊。如果沒有索引,那麼將從表中第一條記錄一條條往下遍歷,直到找到該條資訊為止。如果有了索引,那麼會將該Phone欄位,通過一定的方法進行儲存,好讓查詢該欄位上的資訊時,能夠快速找到對應的資料,而不必在遍歷2W條資料了。
       Mysql中的索引的儲存型別有兩種,BTREE、HASH。也就是用樹或者hash值來儲存該欄位,要知道其中詳細是如何查詢的,就需要會演算法的知識了。我們現在只需要知道索引的作用,功能是什麼就行。

MySQL中索引的優缺點和使用原則

  • 優點:
           1. 所有的MySQL列型別(即欄位型別)都可以被索引,也就是可以給任意欄位設定索引。
           2. 大大加快了資料的查詢速度。
  • 缺點:
           1. 建立索引和維護索引要耗費時間,並且隨著資料量的增加所耗費的時間也會增加。
           2. 索引也需要佔空間,我們知道資料表中的資料也會有再大上限的設定。一張表有多個索引,這些索引會被存放到一個專門儲存索引的檔案中,如果大量使用索引,索引檔案可能會比資料檔案更快達到上限值。
  • 使用原則:
           1. 並不是每個欄位設定索引就好,也不是索引越多越好,需要自己合理的設定索引。
           2. 對經常更新的標就避免對其使用過多的索引,對經常查詢的欄位應該建立索引。
           3. 如果一個欄位的值很少就不要建立索引,如:性別只有男女就不要再建立索引。相反,如果一個欄位可取的值特別多就要建立欄位,如:id,每個id都是不同的,這就需要建立索引。

索引引擎

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

  • MyISAM和InnoDB儲存引擎:值支援BTREE索引,即預設使用BTREE,不能更換。
  • MEMORY/HEAP儲存引擎:支援HASH和BTREE索引。

索引分類

索引可以分為四類:單列索引(普通索引,唯一索引,逐主鍵索引)、組合索引、全文索引、空間索引。

  • 單列索引:一個索引只包含單個列,但是一個表可以有多個單列索引。
           1. 普通索引:MySQL中基本索引型別,沒有什麼限制,允許在定義索引的列中插入重複的值和空值,純粹為了查詢資料更快。
           2. 唯一索引:索引列中的值必須是惟一的,但是允許為空值。
           3. 主鍵索引:是一種特殊的唯一索引,不允許有空值。
  • 組合索引:
           1. 用表中的多個欄位組合建立索引,只有在查詢條件中使用了這些欄位中左邊的欄位時,索引才會被使用,使用組合索引時遵循: 最左字首集合。
  • 全文索引:
           1. 全文索引,只有在MyISAM引擎中才能使用,只能在char,varchar,text型別的欄位上使用。介紹了要求,說說什麼是全文索引,就是在一堆文字中,通過其中的某個關鍵字等,就能找到該欄位所屬的記錄行,比如有"你是個大煞筆,二貨 …" 通過大煞筆,可能就可以找到該條記錄。這裡說的是可能,因為全文索引的使用涉及了很多細節,我們只需要知道這個大概意思。
  • 空間索引:
           1. 空間索引是對空間資料型別的欄位建立的索引,MySQL中的空間資料型別有四種,GEOMETRY、POINT、LINESTRING、POLYGON。
           2. 在建立空間索引時,使用SPATIAL關鍵字。
           3. 要求引擎為MyISAM,建立空間索引的列,必須將其宣告為NOT NULL。

文章轉自:https://www.cnblogs.com/whgk/p/6179612.html