MySQL索引介紹

一、什麼是索引?爲什麼要建立索引?
索引用於快速找出在某個列中有一特定值的行,不使用索引,MySQL必須從第一條記錄開始讀完整個表,直到找出相關的行,表越大,查詢數據所花費的時間就越多,如果表中查詢的列有一個索引,MySQL能夠快速到達一個位置去搜索數據文件,而不必查看所有數據,那麼將會節省很大一部分時間。
例如:有一張person表,其中有2W條記錄,記錄着2W個人的信息。有一個Phone的字段記錄每個人的電話號碼,現在想要查詢出電話號碼爲xxxx的人的信息。如果沒有索引,那麼將從表中第一條記錄一條條往下遍歷,直到找到該條信息爲止。如果有了索引,那麼會將該Phone字段,通過一定的方法進行存儲,好讓查詢該字段上的信息時,能夠快速找到對應的數據,而不必在遍歷2W條數據了。其中MySQL中的索引的存儲類型有兩種:BTREE、HASH。 也就是用樹或者Hash值來存儲該字段,要知道其中詳細是如何查找的,就需要會算法的知識了。我們現在只需要知道索引的作用,功能是什麼就行。
二、MySQL中索引的優點和缺點和使用原則   
優點:

1、所有的MySql列類型(字段類型)都可以被索引,也就是可以給任意字段設置索引
2、大大加快數據的查詢速度

缺點:

1、創建索引和維護索引要耗費時間,並且隨着數據量的增加所耗費的時間也會增加
2、索引也需要佔空間,我們知道數據表中的數據也會有最大上線設置的,如果我們有大量的索引,索引文件可能會比數據文件更快達到上線值
3、當對錶中的數據進行增加、刪除、修改時,索引也需要動態的維護,降低了數據的維護速度。

使用原則:
   通過上面說的優點和缺點,我們應該可以知道,並不是每個字段度設置索引就好,也不是索引越多越好,而是需要自己合理的使用。
   1、對經常更新的表就避免對其進行過多的索引,對經常用於查詢的字段應該創建索引,
   2、數據量小的表最好不要使用索引,因爲由於數據較少,可能查詢全部數據花費的時間比遍歷索引的時間還要短,索引就可能不會產生優化效果。
   3、在一同值少的列上(字段上)不要建立索引,比如在學生表的"性別"字段上只有男,女兩個不同值。相反的,在一個字段上不同值較多可以建立索引。
   上面說的只是很片面的一些東西,索引肯定還有很多別的優點或者缺點,還有使用原則,先基本上理解索引,然後等以後真正用到了,就會慢慢知道別的作用。注意,學習這張,很重要的一點就是必須先得知道索引是什麼,索引是幹嘛的,有什麼作用,爲什麼要索引等等,如果不知道,就重複往上面看看寫的文字,好好理解一下。一個表中很夠創建多個索引,這些索引度會被存放到一個索引文件中(專門存放索引的地方)

三、索引的分類     
注意:索引是在存儲引擎中實現的,也就是說不同的存儲引擎,會使用不同的索引
   MyISAM和InnoDB存儲引擎:只支持BTREE索引, 也就是說默認使用BTREE,不能夠更換MEMORY/HEAP存儲引擎:支持HASH和BTREE索引
1、索引我們分爲四類來講
單列索引(普通索引,唯一索引,主鍵索引)、組合索引、全文索引、空間索引

1.1、單列索引:一個索引只包含單個列,但一個表中可以有多個單列索引。 這裏不要搞混淆了。
1.1.1、普通索引:MySQL中基本索引類型,沒有什麼限制,允許在定義索引的列中插入重複值和空值,純粹爲了查詢數據更快一點。
1.1.2、唯一索引:索引列中的值必須是唯一的,但是允許爲空值,
1.1.3、主鍵索引:是一種特殊的唯一索引,不允許有空值。

1.2、組合索引
  在表中的多個字段組合上創建的索引,只有在查詢條件中使用了這些字段的左邊字段時,索引纔會被使用,使用組合索引時遵循最左前綴集合。這個如果還不明白,等後面舉例講解時在細說
1.3、全文索引
  全文索引,只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT類型字段上使用全文索引,介紹了要求,說說什麼是全文索引,就是在一堆文字中,通過其中的某個關鍵字等,就能找到該字段所屬的記錄行,比如有"你是個靚仔,靚女 ..." 通過靚仔,可能就可以找到該條記錄。這裏說的是可能,因爲全文索引的使用涉及了很多細節,我們只需要知道這個大概意思,如果感興趣進一步深入使用它,那麼看下面測試該索引時,會給出一個博文,供大家參考。
1.4、空間索引
  空間索引是對空間數據類型的字段建立的索引,MySQL中的空間數據類型有四種,GEOMETRY、POINT、LINESTRING、POLYGON。在創建空間索引時,使用SPATIAL關鍵字。要求,引擎爲MyISAM,創建空間索引的列,必須將其聲明爲NOT NULL。

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