MySQL索引詳細介紹

一、什麼是索引?爲什麼要建立索引?

索引用於快速找出在某個列中有一特定值的行,不使用索引,MySQL必須從第一條記錄開始讀完整個表,直到找出相關的行,表越大,查詢數據所花費的時間就越多,如果表中查詢的列有一個索引,MySQL能夠快速到達一個位置去搜索數據文件,而不必查看所有數據,那麼將會節省很大一部分時間。

例如:有一張person表,其中有2W條記錄,記錄着2W個人的信息。有一個Phone的字段記錄每個人的電話號碼,現在想要查詢出電話號碼爲xxxx的人的信息。如果沒有索引,那麼將從表中第一條記錄一條條往下遍歷,直到找到該條信息爲止。如果有了索引,那麼會將該Phone字段,通過一定的方法進行存儲,好讓查詢該字段上的信息時,能夠快速找到對應的數據,而不必在遍歷2W條數據了。其中MySQL中的索引的存儲類型有兩種:BTREEHASH。 也就是用樹或者Hash值來存儲該字段。

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

   優點:

   1、所有的MySql列類型(字段類型)都可以被索引,也就是可以給任意字段設置索引;

   2、大大加快數據的查詢速度。

   缺點:

   1、創建索引和維護索引要耗費時間,並且隨着數據量的增加所耗費的時間也會增加;

   2、索引也需要佔空間,我們知道數據表中的數據也會有最大上線設置的,如果我們有大量的索引,索引文件可能會比數據文件更快達到上線值;

   3、當對錶中的數據進行增加、刪除、修改時,索引也需要動態的維護,降低了數據的維護速度。

   使用原則:

   1、對經常更新的表就避免對其進行過多的索引,對經常用於查詢的字段應該創建索引;

   2、數據量小的表最好不要使用索引,因爲由於數據較少,可能查詢全部數據花費的時間比遍歷索引的時間還要短,索引就可能不會產生優化效果;

   3、在一同值少的列上(字段上)不要建立索引,比如在學生表的"性別"字段上只有男,女兩個不同值。相反的,在一個字段上不同值較多可以建立索引。

三、索引的分類  

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

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

           MEMORY和HEAP存儲引擎:支持HASH和BTREE索引。

單列索引(普通索引,唯一索引,主鍵索引)、組合索引、全文索引、空間索引。

       1.1  單列索引:一個索引只包含單個列,但一個表中可以有多個單列索引。 這裏不要搞混淆了。

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

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

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

       1.2  組合索引

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

       1.3 全文索引

  全文索引,只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT類型字段上使用全文索引,介紹了要求,說說什麼是全文索引,就是在一堆文字中,通過其中的某個關鍵字等,就能找到該字段所屬的記錄行。

          1.4 空間索引

  空間索引是對空間數據類型的字段建立的索引,MySQL中的空間數據類型有四種,GEOMETRY、POINT、LINESTRING、POLYGON。在創建空間索引時,使用SPATIAL關鍵字。要求,引擎爲MyISAM,創建空間索引的列,必須將其聲明爲NOT NULL。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章